Docker是一种容器技术,它可以快速部署环境。
其官网
https://github.com/docker/docker.github.io
Docker是开源的容器引擎,可以让开发者打包应用以及依赖的库,然后发布到任何流行的linux发行版上,移植很方便。
它由go语言编写,基于apache2.0协议发布。基于linux kernel,要想在win下运行需要借助一个vm(虚拟机)来实现
自2013年开始,近些年发展迅猛,docker从1.13x开始,版本分为社区版ce和企业版ee,并且基于年月的时间线形式,当前最新稳定版为17.09 参考
http://blog.csdn.net/chenhaifeng2016/article/details/68062414
传统虚拟化和docker都是建立在有硬件支持的物理机上的操作系统上。传统虚拟化在操作系统上建立Hypervisor来驱动虚拟化。docker 上的docker engine 也Hypervisor类似,也是用来驱动虚拟化的。不同的是docker是不需要安装客户虚拟机来安装应用或者服务
。
镜像
,是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。
容器
,镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。
仓库
,存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是Docker hub hub.docker.com 国内公开仓库 dockerpool.com
安装docker有两种方法
[root@zyj-01 ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
[root@zyj-01 ~]# yum install -y docker-ce
[root@zyj-01 src]# yum install -y container-selinux
[root@kun01 src]# rpm -ivh docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm
启动docker服务
[root@zyj-01 src]# systemctl start docker
下载镜像
格式:docker pull 镜像名
[root@zyj-01 src]# docker pull centos
由于下载国外的镜像慢 这里可以使用国内的加速器 重启服务再下载
[root@zyj-01 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
[root@zyj-01 ~]# systemctl restart docker
[root@zyj-01 ~]# docker pull centos
查看本地的所有镜像
格式:docker images
[root@zyj-01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5182e96772bf 6 weeks ago 200MB
搜索指定的镜像
格式:docker search 镜像名
[root@zyj-01 ~]# docker search jumpserver
给镜像改名字 原来的镜像还在
格式:docker tag 镜像名 新镜像名[:备注]
[root@zyj-01 ~]# docker tag centos kun_centos
[root@zyj-01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5182e96772bf 6 weeks ago 200MB
kun_centos latest 5182e96772bf 6 weeks ago 200MB
centos和 kun_centos名字不一样 但是 IMAGE ID
是一致的,它们是同一个镜像
也可以添加备注标签
[root@zyj-01 ~]# docker tag centos kun_centos:180918
[root@zyj-01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5182e96772bf 6 weeks ago 200MB
kun_centos 180918 5182e96772bf 6 weeks ago 200MB
kun_centos latest 5182e96772bf 6 weeks ago 200MB
:180918
指TAG的备注信息
把镜像启动为容器
格式:docker run -itd 镜像名
[root@zyj-01 ~]# docker run -itd centos
cdc6436e64ff3773c48d02f9847473326a3001a526db9808aecdfdff7e7dd9da
-i
表示让容器的标准输入打开
-t
表示分配一个伪终端
-d
表示后台启动,要把-i -t -d 放到镜像名字前面
查看运行的容器
格式:docker ps
[root@zyj-01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdc6436e64ff centos "/bin/bash" About a minute ago Up About a minute
查看全部容器 包括停止的容器
格式:docker ps -a
[root@zyj-01 ~]# docker ps -a
删除指定镜像
格式:docker rmi 镜像名[:备注]/ID
[root@zyj-01 ~]# docker rmi kun_centos
Untagged: kun_centos:latest
[root@zyj-01 ~]# docker rmi kun_centos:180918
Untagged: kun_centos:180918
当镜像有备注时,删除镜像也要带上备注,否则默认删除带latest
的镜像,也可以指定image id
来删除镜像来把其他改名的镜像一同删除
[root@zyj-01 ~]# docker rmi 5182e96772bf
可以通过容器来自定义镜像 来创建自己的镜像
进入启动的容器里
格式:docker exec -it 容器ip bash
[root@zyj-01 ~]# docker exec -it cdc643 bash
容器id可以用docker ps
查看,最后面的bash
为进入容器后我们要执行的命令,这样就可以打开一个终端。
进入到该容器中,我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像。这里我们安装net-tools工具 并按Ctrl+D
退出容器
[root@cdc6436e64ff /]# yum install -y net-tools
容器创建新镜像
格式:docker commit -m "备注信息" [-a "作者名字"] image IP 新镜像名字
[root@zyj-01 ~]# docker commit -m "install net-tools" -a "kun" cdc6436e centos_net
-m
加一些改动信息
-a
指定作者相关信息 ,可以不加
cdc6436e
这一串为容器id,再后面为新镜像的名字
[root@zyj-01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_net latest aa79b8e09df5 4 minutes ago 293MB
centos latest 5182e96772bf 6 weeks ago 200MB
已经多了一个centos_net得镜像
先通过下面网址去下载模板文件,再上传到服务器里http://openvz.org/Download/templates/precreated
把模板导入为镜像
格式:cat 模板镜像文件 | docker import - 镜像名
[root@zyj-01 src]# cat centos-6-x86-minimal.tar.gz | docker import - centos6
模板镜像文件一般为压缩包文件
[root@zyj-01 src]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6 latest 6566ecb04304 About a minute ago 512MB
`
可以发现多了一个centos6的镜像
把镜像导出为文件
格式:docker save -o 导出的文件名 镜像名
[root@zyj-01 src]# docker save -o centos_net.tar centos_net ##把镜像centos_net导出为centos_net.tar文件
导出的文件一般用于备份
通过文件来恢复镜像
格式:docker load < 文件名
或者 docker load --input 文件名
[root@zyj-01 src]# docker load < centos_net.tar
[root@zyj-01 src]# docker load --input centos_net.tar
把本地镜像上传到官网
格式:docker push 镜像名
[root@zyj-01 src]# docker push centos_net ## 前提是需要先注册一个用户
通过镜像创建容器
格式:docker create -it 镜像名 bash
[root@zyj-01 src]# docker create -it centos_net bash
[root@zyj-01 src]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3fe3d103b8b0 centos_net "bash" 2 minutes ago Created
可以发现centos_net启动为容器,当容器并没有启动
启动/关闭/重启容器
格式:docker start/stop/restart 容器id
[root@zyj-01 src]# docker start 3fe3d10
创建并启动容器
格式:docker run -it 镜像名 bash
[root@zyj-01 src]# docker run -it centos bash
[root@55880ea82e93 /]# ##自动进入容器里面来
这样进入了一个虚拟终端里面,我们可以运行一些命令,使用命令exit
或者ctrl d
退出该bash,当退出后这个容器也会停止 -d
后台运行而不进入容器
自定义容器名字
格式:docker run -itd --name 自定义容器名 镜像名 bash
[root@zyj-01 src]# docker run -itd --name centos6_1 centos6 bash
容器名字是centos6_1
[root@zyj-01 src]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f07c79b1233 centos6 "bash" 57 seconds ago Up 57 seconds centos6_1
NAMES
就是表示自定义容器的名字,启动容器直接认输自定义容器的名字也可以启动
[root@zyj-01 src]# docker exec -it centos6_1 bash ##进入centos6_1容器里
[root@7f07c79b1233 /]#
获取到容器的运行历史信息
格式:docker logs 容器id
[root@zyj-01 src]# docker run -itd centos6 bash -c "echo 123" ##创建启动容器并执行命令
[root@zyj-01 src]# docker logs 037b63ca6
123
进入启动的容器里面
格式:docker exec -it 容器id bash
或者 docker attach 容器id
区别:docker attach 退出终端,容器也会退出。docker exec 退出终端,容器还在运行
[root@zyj-01 src]# docker exec -it centos6_1 bash
[root@zyj-01 src]# docker attach centos6_1 ##不需要家-it bash
删除容器
格式:docker rm [-f] 容器id
[root@zyj-01 src]# docker rm cdc6436e6
-f
把正在运行的容器删除掉
[root@zyj-01 src]# docker rm -f 7f07c7
7f07c7
把容器导出为文件
格式:docker export 容器id > 文件名
[root@zyj-01 src]# docker export centos6_1 > file.tar
一般把容器导出为文件用于迁移到其他机器上,再到另台机器上把文件导入镜像
[root@zyj-01 src]# cat file.tar | docker import - centos6_1
通过registry
镜像来创建私有仓库
,那么自定义的镜像就可以不需要上传到官网的公共仓库上了
[root@zyj-01 src]# docker pull registry
[root@zyj-01 src]# docker run -d -p 5000:5000 registry
-p`会把容器的端口映射到宿主机上,`:左边为宿主机监听端口`,`:右边为容器监听端口
[root@zyj-01 src]# docker tag centos6 192.168.157.132:5000/centos6
标签名固定格式 IP地址:端口/标签名
用于上传私有仓库
格式:docker push ip地址:端口/镜像名
[root@zyj-01 src]# docker push 192.168.157.132:5000/centos6
The push refers to a repository [192.168.157.132:5000/centos6]
Get https://192.168.157.132:5000/v2/: http: server gave HTTP response to HTTPS client
由于默认是使用https://形式上传文件 因此出错
[root@zyj-01 src]# vim /etc/docker/daemon.json
添加下面参数
{ "insecure-registries":["192.168.157.132:5000"] }
配置文件里面指定添加此参数,需要把之前的加速器地址注释掉
[root@zyj-01 src]# systemctl restart docker
[root@zyj-01 src]# docker ps -a
[root@zyj-01 src]# docker start 4d93e496 ##启动registry
[root@zyj-01 src]# docker push 192.168.157.132:5000/centos6
小提示: docker重启时所有的容器都自动启动
systemctl restart docker && docker start $(docker ps -a -q)
查看私有仓库
格式:curl IP地址:端口/v2/_catalog
[root@zyj-01 src]# curl 192.168.157.132:5000/v2/_catalog
{"repositories":["centos6"]} ##私有库存里面有centos6镜像
下载私有库存中镜像
格式:docker pull ip地址:端口/镜像名
[root@zyj-01 src]# docker push 192.168.157.132:5000/centos6
前提客户机上安装docker和registry镜像和配置了daemon.json
我们需要多个容器之间相互共享数据,类似于linux里面的NFS,所以就可以搭建一个专门的数据卷容器,相当于把容器中的目录给共享除了,然后其他容器直接挂载该数据卷。
格式:docker run -itd -v 容器的目录 --name 容器别名 镜像名 bash
[root@zyj-01 tmp]# docker run -itd -v /data/ --name testvol centos6_1 bash
-v
后面指定共享容器目录 --name
指定容器的别名
centos6_1镜像启动为容器,名字叫testvol
[root@zyj-01 tmp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ebb513ead13 centos6_1 "bash" 2 minutes ago Up 2 minutes testvol
格式:docker run -itd --volumes-from 容器别名 镜像名 bash
[root@zyj-01 tmp]# docker run -itd --volumes-from testvol centos6 bash
当容器关闭删除时产生的数据会丢失掉,因此可以把本地目录挂载到容器里来保持数据,此时此容器也称数据卷容器,其他容器可以挂载它来同步数据并保持到本地目录中
格式:docker run -itd -v 本地目录:容器的目录 镜像名 bash
[root@zyj-01 ~]# docker run -itd -v /tmp/:/tmp centos6_1 bash
-v
用来指定挂载目录,:前面的/data/为宿主机本地目录
,:后面的/data/为容器里的目录
,会在容器中自动创建
由于没有定义–name 因此容器别名由系统随机定义 可以发现为boring_shockley
[root@zyj-01 tmp]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce916b75047d centos6_1 "bash" 2 hours ago Up 2 hours boring_shockley
[root@zyj-01 tmp]# docker run -itd --volumes-from boring_shockley centos6 bash
进入刚刚运行的容器创建目录
[root@zyj-01 tmp]# docker exec -it 82e96c2ed9 bash
[root@82e96c2ed990 /]# cd /tmp/ ##进入tmp目录再创建aaa目录
[root@82e96c2ed990 tmp]# mkdir aaa
回到本地tmp目录下发现有刚刚创建的目录
[root@zyj-01 tmp]# ls
aaa
开始建立数据卷容器时候并没有映射宿主机的目录,用已下方法备份
[root@zyj-01 ~]# docker run -itd -v /data/ --name testvol1 centos6_1 bash
宿主机创建备份目录
[root@zyj-01 ~]# mkdir -p /data/backup
新开容器挂载数据卷容器并映射本地备份目录和执行压缩命令
[root@zyj-01 ~]# docker run --volumes-from testvol1 -v /data/backup/:/backup centos6_1 tar cvf /backup/data.tar /data/
--volumes-from testvol1
指定挂载数据卷testvol1
-v /data/backup/:/backup
容器中/backup映射到本地机/data/backup/
tar cvf /backup/data.tar /data/
把容器中的/data目录拷贝到容器中的/backup/中,也就是本地机的/data/backup/
思路图
思路: 和备份思路一样,先新建一个数据卷容器,再建一个新的容器并挂载该数据卷容器,然后再把tar包解包。
新建数据卷容器
[root@zyj-01 ~]#docker run -itd -v /data/ --name testvol2 centos bash
挂载数据卷新建容器,并解包
[root@zyj-01 ~]#docker run --volumes-from testvol2 -v /data/backup/:/backup centos tar xf /backup/data.tar
host模式
:docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机ip。使用docker run时使用--net=host
指定container模式
:多个容器使用共同的网络,看到的ip是一样的。使用--net=container:container_id/container_name
none模式
:这种模式下,不会配置任何网络。使用--net=none
指定bridge模式
:这种模式会为每个容器分配一个独立的Network Namespace。类似于vmware的nat网络模式。同一个宿主机上的所有容器会在同一个网段下,相互之间是可以通信的。使用--net=bridge
指定默认模式,不用指定默认就是这种网络模式。思路:
首先使用centos镜像新建一个容器,然后在该容器中安装httpd服务,并启动。
再把该容器导成一个新的镜像(centos-nginx),然后再使用新镜像创建容器,并指定端口映射。
再通过其他机器来访问本地的映射端口来访问容器
1.创建容器并安装软件,这里已nginx为实例
[root@zyj-01 ~]# docker run -itd centos_net bash ##启动容器
[root@zyj-01 ~]# docker exec -it 9eeb7d5e669 bash ##进入容器
[root@9eeb7d5e6697 /]# yum install -y epel-release
[root@9eeb7d5e6697 /]# yum install -y nginx ##安装nginx
[root@9eeb7d5e6697 /]# systemctl start nginx
2.把安装了Nginx的容器转换为镜像
[root@zyj-01 ~]# docker commit -m "install nginx" -a "kun" 9eeb7d5 centos_nginx
3.把镜像启动为容器并映射宿主机的端口
[root@zyj-01 ~]# docker run -itd -p 8888:80 centos_nginx bash
-p` 指定端口映射 `:左边是宿主机端口`,`:右边是容器端口
4.进入容器启动服务
[root@zyj-01 ~]# docker exec -it 316962b bash ##进入新的容器
[root@316962b00ea1 /]# systemctl start nginx
Failed to get D-Bus connection: Operation not permitted
Failed to get D-Bus connection: Operation not permitted
解决 启动容器是添加启动dbus-daemon参数
[root@316962b00ea1 /]# exit
[root@zyj-01 ~]# docker rm -f 316962b00 ##退出并删除正在运行的容器再带上参数运行
[root@zyj-01 ~]# docker run -itd --privileged -e "container=docker" -p 8888:80 centos_nginx /usr/sbin/init
[root@zyj-01 ~]# docker exec -it b810dc9653 bash ##进入添加参数后的容器
[root@b810dc96534f /]# systemctl start nginx
使用浏览器访问宿主机的8888端口
为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求。只要将Docker容器和宿主机的网卡桥接起来,再给Docker容器配上IP就可以了。
1.把宿主机的网卡拷贝一份为br0网卡
[root@zyj-01 ~]# cd /etc/sysconfig/network-scripts/
[root@zyj-01 network-scripts]# cp ifcfg-ens33 ifcfg-br0
2.修改ens33和br0网卡配置
[root@zyj-01 network-scripts]# vim ifcfg-ens33
ens33增加BRIDGE=br0,删除IPADDR,NETMASK,GATEWAY,DNS1,UUID
#UUID=853ab223-b6fa-419a-8fbe-f1476d83f2ca
#IPADDR=192.168.157.132
#NETMASK=255.255.255.0
#GATEWAY=192.168.157.2
#DNS1=119.29.29.29
BRIDGE=br0
[root@zyj-01 network-scripts]# vim ifcfg-br0
br0修改TYPE为Bridge DEVICE改为br0 NAME改为br0
TYPE=Bridge
DEVICE=br0
NAME=br0
3.重启网络
[root@zyj-01 network-scripts]# systemctl restart network
br0有IP地址 ens33没有IP地址为正确配置
[root@zyj-01 network-scripts]# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.157.132 netmask 255.255.255.0 broadcast 192.168.157.255
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:71:e0:91 txqueuelen 1000 (Ethernet)
4.下载pipework
[root@zyj-01 network-scripts]# cd
[root@zyj-01 ~]# git clone https://github.com/jpetazzo/pipework
5.把pipework拷贝到环境变量中
[root@zyj-01 ~]# git clone https://github.com/jpetazzo/pipework.git
[root@zyj-01 ~]# cd pipework/
[root@zyj-01 pipework]# cp pipework /usr/local/bin/
6.运行一个不配置任何网络的容器
[root@zyj-01 pipework]# docker run -itd --net=none centos_net bash
7.为刚刚容器重新设置新网段
[root@zyj-01 pipework]# pipework br0 019a92112 192.168.157.66/[email protected]
@前表示要设置的新IP和宿主机的IP同网段` `@后表示网关
8.进入容器里面看看网络
[root@zyj-01 pipework]# docker exec -it 019a92112 bash
[root@019a92112feb /]# ifconfig
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.157.66 netmask 255.255.255.0 broadcast 192.168.157.255
看到刚刚的IP地址出现证明设置正确
使用dockerfile可以快速创建镜像
指定基于哪个基础镜像
格式: FROM
或者 FROM
FROM centos
FROM centos:latest
指定作者信息
格式:MAINTAIN
MAINTAINER aming [email protected]
镜像操作指令
格式: RUN
或者 RUN ["executable","param1","param2"]
RUN yum install httpd
RUN ["/bin/bash", "-c", "echo hello"]
RUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。
三种格式:CMD ["executable", "param1", "param2"]
或者 CMD command param1 param2
或者 CMD ["param1", "param2"]
CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"]
容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是:CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。
格式:ENTRYPOINT ["executable", "param1", "param2"]
或者 ENTRYPOINT command param1 param2
或者 ENTRYPOINT ["param1", "param2"]
容器名字为aming,我们在Dockerfile中指定如下CMD:CMD ["/bin/echo", "test"]
启动容器的命令是 docker run aming
这样会输出 test
假如启动容器的命令是 docker run -it aming /bin/bash
什么都不会输出
ENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行
ENTRYPOINT ["echo", "test"]
docker run -it aming 123
则会输出 test 123
,这相当于要执行命令 echo test 123
用来指定要映射出去的端口
格式:EXPOSE
EXPOSE 22 80 8443
容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需要配合-P(大写)
来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)
来指定。
为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量
格式:ENV
ENV PATH /usr/local/mysql/bin:$PATH
ENV MYSQL_version 5.6
将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。
格式:ADD
ADD <conf/vhosts> </usr/local/nginx/conf>
使用方法和add一样,不同的是,它不支持url
格式:COPY
COPY 1.txt /tmp/2.txt
创建一个可以从本地主机或其他容器挂载的挂载点。
格式: VOLUME ["/data"]
指定运行容器的用户
格式: USER daemon
为后续的RUN、CMD或者ENTRYPOINT指定工作目录
格式:WORKDIR /path/to/workdir
1.创建Dockerfile文件
[root@zyj-01 ~]# vim Dockerfile
添加下面代码
## Set the base image to CentOS 下载本地镜像
FROM centos
# File Author / Maintainer 作者
MAINTAINER kun@180923
# Install necessary tools 下载其他安装包
RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel
# Install Nginx
ADD http://nginx.org/download/nginx-1.8.0.tar.gz .
RUN tar zxvf nginx-1.8.0.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install
RUN rm -fv /usr/local/nginx/conf/nginx.conf
ADD http://www.apelearn.com/study_v2/.nginx_conf /usr/local/nginx/conf/nginx.conf
# Expose ports 暴露80端口
EXPOSE 80
# Set the default command to execute when creating a new container 启动服务 tail -f /etc/passwd 为了让容器不中断
ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /etc/passwd
2.创建镜像
[root@zyj-01 ~]# docker build -t centos_nginx .
-t
指定创建镜像的名字
[root@zyj-01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos_nginx latest 5868685fbec2 31 seconds ago 364MB
centos_nginx是我们用dockerfile创建的镜像
3.启动镜像为容器
[root@zyj-01 ~]# docker run -itd -p 8888:80 centos_nginx bash
可以正常访问Nginx服务
[root@zyj-01 ~]# curl 127.0.0.1:8888 -I
HTTP/1.1 200 OK
docker compose
可以方便我们快捷高效地管理容器的启动、停止、重启等操作,它类似于linux下的shell脚本,基于yaml语法。
在该文件里我们可以描述应用的架构,比如用什么镜像、数据卷、网络模式、监听端口等信息。我们可以在一个compose文件中定义一个多容器的应用(比如jumpserver),然后通过该compose来启动这个应用。
1.下载compose
[root@zyj-01 ~]# curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
2.设置权限
[root@zyj-01 ~]# chmod 755 /usr/local/bin/docker-compose
查看compose版本
格式:docker-compose version
[root@zyj-01 ~]# docker-compose version
docker-compose version 1.17.0-rc1, build a0f95af
docker-py version: 2.5.1
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
编写一个docker-compose 代码在下面网址
https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/25docker/docker-compose.yml
[root@zyj-01 ~]# vim docker-compose.yml
version: "2"
services:
app1:
image: centos_nginx
ports:
- "8080:80"
networks:
- "net1"
volumes:
- /data/:/data
app2:
image: centos_net
networks:
- "net2"
volumes:
- /data/:/data1
entrypoint: tail -f /etc/passwd
networks:
net1:
driver: bridge
net2:
driver: bridge
entrypoint: tail -f /etc/passwd
作用和dockerfile中一样 为了让最后一个容器继续开启 bridge
类似vmwaver中NAT模式 默认的
启动容器
[root@zyj-01 ~]# docker-compose up -d
up
表示创建并启动容器 -d
表示后台运行
查看文档
[root@zyj-01 ~]# docker-compose --hlep
docker-compose ps
查看所有容器情况
docker-compose stop
停止运行容器 和start对应
docker-compose down
停止并移除容器 和up对立
docker-compose rm
删除停止的容器 -f
删除正在运行的容器