[root@xyue ~] docker run -d -v /data1 -v /data2 --name web httpd:centos
955f7c7b5784454f742ecbeaf516341c8289c00bb4c30d7991658363faa83322
[root@xyue ~] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955f7c7b5784 httpd:centos "/run.sh" 2 minutes ago Up 2 minutes 80/tcp web
进入容器中,可以看到两个数据卷已经创建成功分别挂载到 /data1 /data2目录上
[root@xyue ~] docker exec -it web /bin/bash
[root@955f7c7b5784 /]# ls -l
total 16
-rw-r--r--. 9 root root 12005 Aug 4 22:05 anaconda-post.log
lrwxrwxrwx. 1 root root 7 Aug 4 22:04 bin -> usr/bin
drwxr-xr-x. 3 root root 18 Aug 13 07:51 boot
drwxr-xr-x. 2 root root 6 Aug 14 02:08 data1
drwxr-xr-x. 2 root root 6 Aug 14 02:08 data2
[root@xyue ~] docker run -d -v /var/www/:/data1 --name web-1 httpd:centos
c8ff659f1e5b8419f535877a52734b1de61202c92ff9046171d134ded18f3250
[root@xyue ~] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c8ff659f1e5b httpd:centos "/run.sh" 15 seconds ago Up 14 seconds 80/tcp web-1
我们在宿主机本地目录/var/www里面创建一个file,进入容器中进入相对应的挂载目录就可以看到刚刚我们创建的文件夹
#宿主机/var/www里面的目录
[root@xyue ~]# cd /var/www/
[root@xyue www]# mkdir file
[root@xyue www]# ls
file html
#进入容器/data1查看
[root@xyue www]# docker exec -it web-1 /bin/bash
[root@c8ff659f1e5b /]# cd /data1/
[root@c8ff659f1e5b data1]# ls
file html
#如果挂载的宿主机目录在挂载前已有目录挂在后一样能迁移到容器目录 数据卷容器
如果需要在容器之间共享数据,最简单的方法就是用数据卷容器。数据卷容器就是一个普通的容器,专门提供数据卷提供给其他容器挂载使用。
我们使用之前创建好的数据卷容器web,其中所创建的数据卷分别挂载到/data1 /data2 使用--volumes-from来挂载web容器中的数据卷到新的容器,新的容器名为db1
[root@xyue ~] docker run -it --volumes-from web --name db1 httpd:centos /bin/bash
[root@13c3a949ed6d /] ls
anaconda-post.log boot data2 etc lib media opt root run.sh srv tmp var
bin data1 dev home lib64 mnt proc run sbin sys usr
#在db1容器数据卷/data1目录中创建一个文件夹file再进入web容器中的/data1查看就可以看到桐言的一个file
[root@13c3a949ed6d /] cd /data1
[root@13c3a949ed6d data1] ls
[root@13c3a949ed6d data1] touch file
[root@13c3a949ed6d data1] ls
file
[root@13c3a949ed6d data1] exit
exit
[root@xyue ~] docker exec -it web /bin/bash
[root@955f7c7b5784 /] cd /data1
[root@955f7c7b5784 data1] ls
file
Docker网络通信
Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务
端口映射
实现端口映射,需要docker run 命令时使用-P 选项来实现端口映射Docker会随机映射一个端口范围49000~49900的端口到容器内部开放的网络端口映射
例如:
[root@xyue ~]# docker run -d -P httpd:centos
dcb542da6d70226c19bdff9459b87853b0a0bbc161e61e71b889417b2ec1d75e
#用docker ps -a 可以看到本机的32768端口映射到web容器中的80端口,用网页访问32768端口就可以访问web容器中的80端口
[root@xyue ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcb542da6d70 httpd:centos "/run.sh" 5 seconds ago Up 5 seconds 0.0.0.0:32768->80/tcp adoring_jepsen
用小写的-p可以自己指定端口,只要自己指定的端口没有被占用都可以
[root@xyue ~]# docker run -d -p 12380:80 httpd:centos
容器互联
容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道从而实现容器的互联
在运行docker run --link选项可以实现容器中间的互联通信,格式为:--link name:alias
1:创建源容器
首先使用docker run 命令建立容器A 使用--name 指定容器名称为web1
[root@xyue ~] docker run -d -P --name web1 httpd:centos
d699b567ccd43c36b6874269d3d97d2f77f70ccaf1869e4832849b4734caec09
[root@xyue ~] docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d699b567ccd4 httpd:centos "/run.sh" 12 seconds ago Up 12 seconds 0.0.0.0:32769->80/tcp web1