centos7下docker1.12.5学习笔记

一、Docker简介

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker组成 Docker Client 和 Docker Server
Docker组件 镜像(Image) 容器(Container) 仓库(Repository)

二、Docker应用场景

1. 简化配置
2. 代码流水线(Code Pipeline)管理
3. 提高开发效率
4. 隔离应用
5. 整合服务器
6. 调试能力Docker
7. 多租户环境
8. 快速部署

 

三、Docker安装
请更新自已的yum源,避免安装超时

http://mirrors.aliyun.com/help/centos
http://mirrors.163.com/.help/centos.html
> yum install docker-engine

或者如下(老式写法)

> yum install docker-io
> yum install docker.io

添加开机启动

> chkconfig docker on
> chkconfig --list docker

启动docker

> systemctl start docker.service

停止docker

> systemctl stop docker.service

 

四、Docker镜像
查看版本号

> docker version

查看docker层面信息,images,containers数等

> docker info

搜索centos镜像

> docker search centos

下载镜像

> docker pull centos

如果下载时出现超时,请换如下,详细请看http://get.daocloud.io/

> docker pull daocloud.io/library/centos:latest

查看镜像

> docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/centos   latest              67591570dd29        4 weeks ago         191.8 MB

删除镜像

> docker rmi 镜像ID

 

五、Docker容器
创建一个容器,并运行/bin/echo程序

> docker run daocloud.io/library/centos /bin/echo "hello world"

查看所有容器

> docker ps -a

--name给容器起个名称
-i开启输入终端,-t表示使用终端
该命令通过centos镜像来创建一个mydocker容器,然后运行指定的一个程序,程序退出那容器也退出。

> docker run --name mydocker -it daocloud.io/library/centos /bin/bash

退出容器

> exit

重新启动原有容器,98c6f96292c1表示容器ID

> docker restart 98c6f96292c1

让容器在后台运行,如果镜像没有下载,会自动帮我们下载nginx镜像

> docker run -d --name mynginx daocloud.io/library/nginx:1.7.1 nginx

删除容器

> docker rm 容器ID

停止容器

> docker stop 容器ID

进入容器(不建议)

> docker attach 容器ID

获取容器的PID

> docker inspect --format "{{.State.Pid}}" 容器名称

通过容器PID进入容器

> nsenter --target 容器PID --mount --uts --ipc --net --pid

如果nsenter没有需要安装

> yum install -y util-linux

 

六、Docker网络
查看主机网桥信息

> brctl show

如果提示没有此命令请安装

> yum install bridge-utils

在容器中查看路由表

> ip ro li

随机映射(把容器中的端口随机映射到主机端口)

> docker run -d -P --name mynginx2 daocloud.io/library/nginx:1.7.1 nginx

把容器80端口映射到主机88端口

> docker run -d -p 88:80 --name mynginx2 daocloud.io/library/nginx:1.7.1 nginx

映射端口的方式:

-p 主机端口:容器端口
-p ip:主机端口:容器端口
-p ip::容器端口
-p 主机端口:容器端口 -p 主机端口:容器端口

 

七、Docker数据管理
1、数据卷
主机创建数据卷并挂载到容器/data下

> docker run -it --name 111 -v /data daocloud.io/library/centos

把主机的/data挂载到容器的/data2下

> docker run -it --name 222 -v /data:/data2 daocloud.io/library/centos

如果发现容器中/data2无法写入文件,请关闭selinux。

只读

> docker run -it --name 333 -v /data:/data2:ro daocloud.io/library/centos

查看数据卷创建在哪了

> docker inspect -f {{.Mounts}} 容器名
> docker inspect -f {{.Config.Volumes}} 容器名

以下写法是老式写法

> docker inspect -f {{.Volumes}} 容器名

 
2、数据卷容器
把一个容器当作数据容器来挂载

> docker run -it --name 444 --volumes-from 容器名 daocloud.io/library/centos

 
八、手动构建Docker镜像
我们如何自已创建一个nginx镜像?

首先创建一个centos空容器

> docker run -it --name mynginx daocloud.io/library/centos

安装一些必要的库

> yum install wget gcc gcc-c++ make openssl-devel

下载pcre和nginx源码

> wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
> wget http://mirrors.sohu.com/nginx/nginx-1.10.3.tar.gz

把源码移动到/usr/local/src下并解压

> mv *.gz /usr/local/src
> tar xf pcre-8.39.tar.gz
> tar xf nginx-1.10.3.tar.gz

创建用户

> useradd -s /sbin/nologin -M nginx

进入nginx目录

> ./configure --prefix=/usr/local/nginx \
--with-pcre=/usr/local/src/pcre-8.39 \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module
> make && make install

让nginx在前台运行(不能让nginx在后台运行)

> vi /usr/local/nginx/conf/nginx.conf
daemon off;

提交我们自已创建的镜像

> docker commit -m "my nginx" 容器ID lackone/mynginx:1

我们来使用我们创建的镜像

> docker run -d -p 99:80 --name 666 lackone/mynginx:1 /usr/local/nginx/sbin/nginx

然后我们通过主机IP:99就可以访问容器内的nginx服务器了。


九、Docker的Dockerfile

1.基础镜像信息
2.维护者信息
3.镜像操作指令
4.容器启动时执行指令

创建一个目录

> mkdir /data/dockerfile
> cd /data/dockerfile

创建一个Dockerfile文件,首字母大写

> vi Dockerfile
#This is Dockerfile
#Version 1.0
#Author: lackone

#基础镜像
FROM daocloud.io/library/centos

#维护者信息
MAINTAINER lackone

#COPY文件,如果是压缩包会自动解压
#注意压缩包必须与Dockerfile同目录
ADD pcre-8.39.tar.gz /usr/local/src
ADD nginx-1.10.3.tar.gz /usr/local/src

#执行命令
RUN yum install wget gcc gcc-c++ make openssl-devel
RUN useradd -s /sbin/nologin -M nginx

#当前工作目录
WORKDIR /usr/local/src/nginx-1.10.3

#执行命令
RUN ./configure --prefix=/usr/local/nginx \
--with-pcre=/usr/local/src/pcre-8.39 \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module
RUN make && make install
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#目录挂载
#VOLUME

#端口
EXPOSE 80

#声明环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#运行nginx,进程要一直运行下去
CMD ["nginx"]

构建镜像

> docker build -t 名称:标识 /data/dockerfile/

 
十、Docker资源隔离和限制(cgroup)

首先我们创建一个压力测试镜像

> mkdir /data/stress
> wget http://mirrors.aliyun.com/repo/Centos-7.repo
> wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
> vi Dockerfile
FROM daocloud.io/library/centos
ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
ADD stress-1.0.4.tar.gz /usr/local/src
RUN yum makecache
RUN yum install -y make automake autoconf gcc gcc-c++
WORKDIR /usr/local/src/stress-1.0.4
RUN ./configure --prefix=/usr/local/stress
RUN make && make install
ENV PATH /usr/local/stress/bin:$PATH
#CMD与ENTRYPOINT的区别在于执行docker run时参数传递的方式不同
ENTRYPOINT ["stress"]

#构建stress镜像

> docker build -t stress:1 .

创建容器并测试
--rm表示容器退出自动删除

> docker run -it --rm --name test stress:1 --cpu 1

-c是docker限制的cpu使用份额
--cpu是传递给stress的参数

> docker run -it --rm -c 512 --name test stress:1 --cpu 1

--cpuset-cpus=0表示第一颗CPU

> docker run -it --rm --cpuset-cpus=0 --name test stress:1 --cpu 1

-m 128m表示docker限制的内存大小
--vm-bytes表示stress测试使用的内存大小

> docker run -it --rm -m 128m --name test stress:1 --vm-bytes 128m --vm-hang 0

 
十一、Docker网络
1、桥接模式
默认docker网络使用的是桥接模式
当docker启动时会创建一个docker0的虚拟网桥,创建容器时会创建一个网桥接口,通过网桥转发。

> brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242c41e7d80    no        vethaa35584
                                              vethbd1676b

2、host模式
容器与主机共用一个Network Namespace,共享主机网络信息。
3、container复用方式
与另一个容器共用一个Network Namespace,而不是和宿主机共享。
4、none方式
容器拥有自已的Network Namespace,但不进行任何网络配置,没有网卡,IP,路由信息。

十二、Docker的Registry

把Registry下载下来

> docker pull daocloud.io/library/registry:0.5.9

创建容器并运行,启动了一个私有的仓库,主机监听6666端口

> docker run -d -p 6666:5000 daocloud.io/library/registry:0.5.9

首先创建一个tag,指定仓库的IP、端口、目录和容器名

> docker tag 镜像ID 192.168.1.233:6666/test/mynginx:1

查看镜像

> docker images

push镜像到本地仓库

> docker push 192.168.1.233:6666/test/mynginx:1

如果无法push成功请修改下面配置,因为要走https

> vi /etc/sysconfig/docker

去掉下面的#号,并修改如下,改成自已的IP和端口

INSECURE_REGISTRY='--insecure-registry 192.168.1.233:6666'

然后重启服务

> systemctl restart docker.service

现在我们就可以把我们push的镜像下载下来了

> docker pull 192.168.1.233:6666/test/mynginx:1

 
十三、Docker的WEB管理工具

Shipyard

> curl -s https://shipyard-project.com/deploy | bash -s

Shipyard默认访问端口是8080,默认用户名和密码是admin和shipyard

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


最近一直在开发Apworks框架的案例代码,同时也在一起修复Apworks框架中的Bug和一些设计上的不足。遇到的一个普遍问题是,代码的调试过程需要依赖很多外部系统,比如MongoDB、PostgreSQL、RabbitMQ等。当然可以在本机逐一安装这些服务,然后对服务进行配置,使其满足自己开发调试
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务。其实在Docker中运行SQL Server是非常容
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些。项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整合官方文档的某些步骤的基础上,写篇文章简单总结一下。 Rook-Ceph是Kubernetes中分布
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件。对于多阶段构建,您可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个指令都开始一个新的构建。您可以选择
本文介绍compose配置文件参数的使用,熟练编写compose文件 [root@docker lnmp]# cat lnmp.yaml version: '3' services: nginx: build: /root/docker_demo/nginx/ ports: - &q
环境 docker-machine主机:192.168.1.9 docker主机:192.168.1.10 步骤: 安装docker-machine 创建ssh密钥对,实现两主机无密登录 创建docker主机,命名host1 变更docker环境变量 运行容器查看两端是否同步 镜像容器同步测试成功
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
https://blog.csdn.net/wanglei_storage/article/details/77508620 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行。然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容
1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题。 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel。 Kestrel is grea
docker rm `docker ps -a | grep Exited | awk '{print $1}'` 删除异常停止的docker容器 docker rmi -f `docker images | grep '<none>' | awk &#3
什么是Docker Compose 在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具。 但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到了以下的一个需求,让我明白了在一台服务器上不得不用多个服务的时
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS中的附加进程非常强大,目前提供了9种常用的附加方式。 在当前.Net Core支持跨平台的大背景下,其中Linux环境和
https://www.cnblogs.com/bigberg/p/8867326.html 一、简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行
.Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图。 实现 安装Nuget包 <PackageReference Include="Selenium.Chrome.WebDriver" Version="85.0.0" /&g
原文 https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定。 co