一、Docker概述

1.1 Docker概述

Docker是什么?、

  • 是一种轻量级的“虚拟机”
  • 在Linux容器里运行应用的开源工具

Docker与虚拟机的区别

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
  • 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

Docker的使用场景

  • 打包应用程序简化部署
  • 可脱离底层硬件任意迁移,例如:将服务器从腾讯云迁移到阿里云

1.2 Docker的核心概念及安装方式

Docker核心概念

  • 镜像:一个面向Docker容器引擎的只读模板
  • 容器:从镜像创建的运行实例
  • 仓库:集中保存镜像的地方

Centos安装Docker的两种方式

  • 使用URL获得Docker的安装脚本进行安装
  • 使用YUM仓库来安装Docker

二、Docker的基本操作

2.1 环境准备及优化

安装依赖包

[root@docker ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
'yum-utils提供了yum-config-manager'
'device mapper存储驱动程序需要device-mapper-persistent-data和lvm2'
'Device Mapper是Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构'

设置阿里云镜像源

[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker-CE

[root@docker ~]# yum install docker-ce -y

镜像加速

默认使用公有仓库进行下载,在国内,我们需要进行镜像加速来提高镜像下载速度,这里我用的阿里云的镜像加速
在这里插入图片描述
在这里插入图片描述

[root@docker ~]# systemctl start docker
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'
'复制上面那段就可以'
[root@docker ~]# systemctl daemon-reload 
[root@docker ~]# systemctl restart docker

网络优化

[root@docker ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward=1
[root@docker ~]# sysctl -p
[root@docker ~]# systemctl restart network
[root@docker ~]# systemctl restart docker

2.2 镜像的基本操作

查看docker版本

[root@docker ~]# docker -v
Docker version 19.03.13, build 4484c46d9d

[root@docker ~]# docker version 
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

搜索镜像(公有仓库)

例如:搜索Nginx镜像
[root@docker ~]# docker search nginx
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
nginx                              Official build of Nginx.                        13745               [OK]                
jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1874                                    [OK]
richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   787                                     [OK]
linuxserver/nginx                  An Nginx container, brought to you by LinuxS…   128
......             

下载镜像

例如:下载Nginx镜像
[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete 
ebd81fc8c071: Pull complete 
655316c160af: Pull complete 
d15953c0e0f8: Pull complete 
2ee525c5c3cc: Pull complete 
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

下载的文件信息路径

/var/lib/docker/image/overlay2
[root@docker overlay2]# cat repositories.json 
{"Repositories":{"nginx":{"nginx:latest":"sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d","nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0":"sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d"}}}

查看镜像列表

[root@docker overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        7 days ago          133MB

获取镜像信息

[root@docker overlay2]# docker inspect 7e4d58f0e5f3  '镜像的image id'

给镜像添加新标签

[root@docker overlay2]# docker tag nginx:latest nginx:web
[root@docker overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        7 days ago          133MB
nginx               web                 7e4d58f0e5f3        7 days ago          133MB

删除标签

[root@docker overlay2]# docker rmi nginx:web 
Untagged: nginx:web
[root@docker overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        7 days ago          133MB

删除镜像
通过IMAGE ID删除镜像时,必须只有一个相同的镜像存在,别名标签的镜像和源镜像同时存在时无法删除

[root@docker overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        7 days ago          133MB
nginx               web                 7e4d58f0e5f3        7 days ago          133MB
[root@docker overlay2]# docker rmi 7e4d58f0e5f3  '此时无法删除镜像'
Error response from daemon: conflict: unable to delete 7e4d58f0e5f3 (must be forced) - image is referenced in multiple repositories
[root@docker overlay2]# docker rmi nginx:web 
Untagged: nginx:web
[root@docker overlay2]# docker rmi 7e4d58f0e5f3
Untagged: nginx:latest
Untagged: nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Deleted: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
Deleted: sha256:eedfd37abc0b05520a719addf6675b372687fe9a2ed1746fa988335720d4376c
Deleted: sha256:4f052ddd517f6dc5b74d2f7d881838b8ec6a5e67ec7a1da8bbbe91e1e068ad3a
Deleted: sha256:5f78154d356577280e4ac0d9bf0d021d488828e57f953b011dcbadaecd539ce4
Deleted: sha256:db5783668220e16186080f3e9d69ad748aab8c72abb8e457f6fc45369461634b
Deleted: sha256:07cab433985205f29909739f511777a810f4a9aff486355b71308bb654cdc868
[root@docker overlay2]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

存出镜像

[root@docker opt]# docker save -o nginx nginx:latest 
[root@docker opt]# ls
containerd  nginx

载入镜像

[root@docker opt]# docker rmi nginx:latest
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@docker opt]# docker load < nginx 
07cab4339852: Loading layer  72.49MB/72.49MB
f431d0917d41: Loading layer  64.31MB/64.31MB
60c688e8765e: Loading layer  3.072kB/3.072kB
eabfa4cd2d12: Loading layer  4.096kB/4.096kB
908cf8238301: Loading layer  3.584kB/3.584kB
Loaded image: nginx:latest
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        7 days ago          133MB

2.3 容器的操作

创建容器

[root@docker opt]# docker create -it nginx:latest /bin/bash
85a39a03e16ddca25725aabe6f6cf47a15d4a63b88dd53ec0aac6af9470eb39e

容器创建后会自动生成一个docker0网卡充当docker的网关

[root@docker opt]# ifconfig 
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:13ff:fe39:d9b  prefixlen 64  scopeid 0x20<link>
        ether 02:42:13:39:0d:9b  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1776 (1.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

查看容器状态

[root@docker opt]# docker ps -a     '此时状态为created'
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
85a39a03e16d        nginx:latest        "/docker-entrypoint.…"   46 seconds ago      Created 

启动容器

[root@docker opt]# docker start 85a39a03e16d
85a39a03e16d
[root@docker opt]# docker ps -a     '此时状态为up'
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
85a39a03e16d        nginx:latest        "/docker-entrypoint.…"   About a minute ago   Up 9 seconds        80/tcp              goofy_mcnulty

登陆正在运行的容器
docker exec -it 容器id 环境

[root@docker opt]# docker exec -it 85a39a03e16d /bin/bash
root@85a39a03e16d:/# ls
bin   docker-entrypoint.d   home   media  proc	sbin  tmp
boot  docker-entrypoint.sh  lib    mnt	  root	srv   usr
dev   etc		    lib64  opt	  run	sys   var

执行完成直接关闭状态时exited

[root@docker opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
3787c9d253e4        nginx:latest        "/docker-entrypoint.…"   3 minutes ago       Exited (0) 3 minutes ago                          fervent_hellman

持续在后台执行

[root@docker opt]# docker run -d nginx:latest /bin/bash -c "while true;do echo hello;done"
b74463cd00c8e7ab4ebbb6007277bd52cdb6d36286130f74246bc23348a6b60d
[root@docker opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
b74463cd00c8        nginx:latest        "/docker-entrypoint.…"   10 seconds ago      Up 10 seconds                 80/tcp              practical_kare

终止运行

[root@docker opt]# docker stop 85a39a03e16d
85a39a03e16d

容器导出

[root@docker opt]# docker export 85a39a03e16d > /opt/nginx_bak
[root@docker opt]# ls
containerd  nginx  nginx_bak

容器导入(会生成镜像,而不会创建容器)

[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              7e4d58f0e5f3        7 days ago          133MB
[root@docker opt]# cat nginx_bak | docker import - nginx:web
sha256:c15c32bf74bb10a4592002a55131d64757ece28b9c94dfea19bc530230432aa2
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               web                 c15c32bf74bb        1 second ago        131MB
nginx               latest              7e4d58f0e5f3        7 days ago          133MB

容器在运行状态时时不能删除它的镜像,必须停止容器运行才可以删除镜像

[root@docker opt]# docker rmi 7e4d58f0e5f3
Error response from daemon: conflict: unable to delete 7e4d58f0e5f3 (cannot be forced) - image is being used by running container 85a39a03e16d

同样的容器在运行时也不可以直接删除容器

[root@docker opt]# docker rm 85a39a03e16d
Error response from daemon: You cannot remove a running container 85a39a03e16ddca25725aabe6f6cf47a15d4a63b88dd53ec0aac6af9470eb39e. Stop the container before attempting removal or force remove

删除容器

[root@docker opt]# docker stop 85a39a03e16d
85a39a03e16d
[root@docker opt]# docker rm 85a39a03e16d
85a39a03e16d
[root@docker opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
b74463cd00c8        nginx:latest        "/docker-entrypoint.…"   12 minutes ago      Exited (137) 11 minutes ago                       practical_kare
cae6ca90998f        nginx:latest        "/docker-entrypoint.…"   13 minutes ago      Exited (0) 13 minutes ago                         vigilant_aryabhata
3787c9d253e4        nginx:latest        "/docker-entrypoint.…"   18 minutes ago      Exited (0) 18 minutes ago                         fervent_hellman
6d8fbd7ab7a0        nginx:latest        "/docker-entrypoint.…"   37 minutes ago      Exited (0) 37 minutes ago                         stoic_kowalevski
ad495f083fd0        nginx:latest        "/docker-entrypoint.…"   37 minutes ago      Exited (0) 37 minutes ago                         elastic_bassi
670c48d4aa6b        nginx               "/docker-entrypoint.…"   38 minutes ago      Exited (0) 38 minutes ago                         pensive_boyd
34ca5e0090df        nginx               "/docker-entrypoint.…"   38 minutes ago      Exited (0) 38 minutes ago                         blissful_satoshi
256a91dc6aa5        nginx               "/docker-entrypoint.…"   39 minutes ago      Exited (0) 39 minutes ago                         magical_solomon
d7336679a55c        nginx               "/docker-entrypoint.…"   39 minutes ago      Exited (0) 39 minutes ago                         brave_bose
b74f159e3b0b        nginx               "/docker-entrypoint.…"   39 minutes ago      Exited (127) 39 minutes ago                       gifted_sinoussi
c69b0b591ac3        nginx               "/docker-entrypoint.…"   39 minutes ago      Exited (127) 39 minutes ago                       exciting_bhabha

批量删除容器

[root@docker opt]# docker ps -a | awk '{print "docker rm "$1}' | bash
Error: No such container: CONTAINER
b74463cd00c8
cae6ca90998f
3787c9d253e4
6d8fbd7ab7a0
ad495f083fd0
670c48d4aa6b
34ca5e0090df
256a91dc6aa5
d7336679a55c
b74f159e3b0b
c69b0b591ac3
[root@docker opt]# docker ps -a  '容器全部删除'
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

三、Docker镜像

3.1 Docker镜像的分层

在这里插入图片描述

3.2 Docker镜像的创建

Docker镜像

  • 应用发布的标准格式
  • 支撑一个Docker容器的运行

Docker镜像的创建方法

  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于Dockerfile创建

3.3 基于已有镜像创建

将容器里面运行的程序及运行环境打包生成新的镜像

docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行
[root@docker ~]# docker commit -m "new" -a "cllt" d5bcd6bba1fb cllt:test
sha256:82785b809795a9928c57968d5137dcd1dda2de0853eeddf6f9c5c2b69ac258cd
[root@docker ~]# docker images |grep cllt
cllt                test                82785b809795        17 seconds ago      203MB

3.4 基于本地模板创建

通过导入系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载地址为:https://wiki.openvz.org/Download/template/precreated
或者使用wget下载:wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

导入成功后可查看本地镜像信息

docker images |grep new
[root@docker ~]# cat debian-7.0-x86-minimal.tar.gz | docker import - cllt:new
sha256:8d6c9b6c757f46b580ae952f3ba23af1ec3da300f5419f82736ee74d4b028727
[root@docker ~]# docker images |grep new
cllt                new                 8d6c9b6c757f        10 seconds ago      215MB

3.5 基于Dockerfile创建

Dockerfile是由一组指令组成的文件
Dockerfile结构四部分

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

Dockerfile每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释

Dockerfile常用操作指令

指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字说明新镜像的维护人信息
RUN 命令在所基于的镜像执行命令,并提交到新的镜像中
CMD [ “要运行的程序”,“参数1”,“参数2”]指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令,如果指定多条则只能执行最后一条
EXPOSE 端口号指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
WORKDIR 路径为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK健康检查
[root@docker opt]# mkdir apache
[root@docker opt]# cd apache
[root@docker apache]# vim Dockerfile 
FROM centos:7              '基于的基础镜像'
MAINTAINER This is cllt    '维护镜像的用户信息'
RUN yum -y update          '镜像操作指令更新yum源'
RUN yum -y install httpd   '镜像操作指令安装apache软件'
EXPOSE 80                  '开启80端口'
ADD index.html /var/www/html/index.html  '复制网站首页'
ADD run.sh /run.sh       '将执行脚本复制到镜像中'
RUN chmod 755 /run.sh    '添加执行权限'
CMD ["/run.sh"]          '启动容器时执行脚本'
[root@docker apache]# vim run.sh 
#!/bin/bash
rm -rf /run/httpd/*   '删除可能存在的apache文件'
exec /usr/sbin/apachectl -D FOREGROUND  '启动apache软件'
[root@docker apache]# vim index.html  '编辑首页'
<h1>this is cllt web</h1>

生成镜像

[root@docker apache]# docker build -t httpd:centos:7 .

新镜像运行容器

[root@docker apache]# docker run -d -p 8080:80 httpd:centos

测试
在这里插入图片描述

四、Docker的数据管理

数据管理操作

  • 方便查看容器内产生的数据
  • 多容器间实现数据共享

两种管理方式

  • 数据卷
  • 数据卷容器

4.1 数据卷

数据卷是一个提供容器使用的特殊目录

宿主目录/var/www挂载容器中的/data1

[root@docker apache]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
[root@1e0d02f2caa2 /]# ls
anaconda-post.log  data1  etc   lib    media  opt   root  sbin  sys  usr
bin                dev    home  lib64  mnt    proc  run   srv   tmp  var
[root@docker ~]# cd /var/www/
[root@docker www]# ls
[root@docker www]# touch 123    '在宿主目录创建新的文件'
[root@docker www]# ls
123
[root@1e0d02f2caa2 /]# cd data1/
[root@1e0d02f2caa2 data1]# ls    '容器中同步'
123

4.2 数据卷容器

创建数据卷容器web100

[root@docker www]# docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash
[root@cf4baea85eae /]# ls
anaconda-post.log  data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                data2  etc  lib   media  opt  root  sbin  sys  usr

新容器挂载数据卷容器web100

[root@docker apache]# docker run -it --volumes-from web100 --name db1 centos:7 /bin/bash
[root@d5bcd6bba1fb /]# ls
anaconda-post.log  data1  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                data2  etc  lib   media  opt  root  sbin  sys  usr

在web100共享的两个目录中分别创建文件

[root@cf4baea85eae /]# touch data1/123.txt
[root@cf4baea85eae /]# touch data2/456.txt

新容器db1同步数据

[root@d5bcd6bba1fb /]# ls data1/
123.txt
[root@d5bcd6bba1fb /]# ls data2/
456.txt

五、私有仓库建立

下载registry镜像

[root@docker opt]# docker pull registry

客户端设置daemon.json文件,指定私有仓库位置

[root@docker opt]# vim /etc/docker/daemon.json 

{
  "insecure-registries": ["192.168.179.129:5000"],
  "registry-mirrors": ["https://阿里云镜像加速地址"]
}
[root@docker opt]# systemctl restart docker.service 

生成registry容器,开放5000端口

[root@docker opt]# docker create -it registry /bin/bash
4db6840d6b4eb2c12a8fdf8da1656420ad9e47b849fe3540e484d6da9c2ebc38
[root@docker opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
4db6840d6b4e        registry            "/entrypoint.sh /bin…"   8 seconds ago       Created                                           peaceful_keldysh
[root@docker opt]# docker start 4db6840d6b4e
[root@docker opt]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

镜像打标签

[root@docker opt]# docker tag nginx:latest 192.168.179.129:5000/nginx

上传镜像,docker push

[root@docker opt]# docker push 192.168.179.129:5000/nginx

获取私有仓库列表

[root@docker opt]# curl -XGET http://192.168.179.129:5000/v2/_catalog
{"repositories":["nginx"]}

将原有的Nginx镜像删除进行测试

[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
cllt                new                 8d6c9b6c757f        13 minutes ago      215MB
cllt                test                82785b809795        19 minutes ago      203MB
httpd               centos              3107272e5a13        7 hours ago         419MB
centos              7                   7e6257c9f8d8        5 weeks ago         203MB
registry            latest              2d4f4b5309b1        3 months ago        26.2MB

下载镜像,docker pull

[root@docker opt]# docker pull 192.168.179.129:5000/nginx
Using default tag: latest
latest: Pulling from nginx
d121f8d1c412: Pull complete 
ebd81fc8c071: Pull complete 
655316c160af: Pull complete 
d15953c0e0f8: Pull complete 
2ee525c5c3cc: Pull complete 
Digest: sha256:794275d96b4ab96eeb954728a7bf11156570e8372ecd5ed0cbc7280313a27d19
Status: Downloaded newer image for 192.168.179.129:5000/nginx:latest
192.168.179.129:5000/nginx:latest
[root@docker opt]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
cllt                         new                 8d6c9b6c757f        14 minutes ago      215MB
cllt                         test                82785b809795        19 minutes ago      203MB
httpd                        centos              3107272e5a13        7 hours ago         419MB
192.168.179.129:5000/nginx   latest              7e4d58f0e5f3        10 days ago         133MB
centos                       7                   7e6257c9f8d8        5 weeks ago         203MB
registry                     latest              2d4f4b5309b1        3 months ago        26.2MB

六、端口映射

在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因此我们需要手动进行设置端口映射

'-P(大p):随机指定端口号'
[root@docker opt]# docker run -d -P httpd:centos 
0b59dacc0f5e5e9f954a885bd048eefb2b45b711449a1ccbff5d51397b72a013
[root@docker opt]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                    NAMES
0b59dacc0f5e        httpd:centos        "/run.sh"                6 seconds ago       Up 5 seconds                 0.0.0.0:32768->80/tcp    angry_ki

在这里插入图片描述

'-p(小p):手动设置端口号'
[root@docker opt]# docker run -d -p 44366:80 httpd:centos

在这里插入图片描述

七、容器互联

创建并运行web10容器,端口号自动映射

[root@docker opt]# docker run -itd -P --name web10 centos:7 /bin/b

创建并运行web20容器,连接到web10和其通信,端口号自动映射

[root@docker opt]# docker run -itd -P --name web20 --link web10:web10 centos:7 /bin/bash

测试,进入web20,ping web10

[root@40223199da2a /]# ping web10
PING web10 (172.17.0.5) 56(84) bytes of data.
64 bytes from web10 (172.17.0.5): icmp_seq=1 ttl=64 time=0.077 ms
64 bytes from web10 (172.17.0.5): icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from web10 (172.17.0.5): icmp_seq=3 ttl=64 time=0.097 ms
64 bytes from web10 (172.17.0.5): icmp_seq=4 ttl=64 time=0.044 ms
64 bytes from web10 (172.17.0.5): icmp_seq=5 ttl=64 time=0.118 ms
^C
--- web10 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.044/0.076/0.118/0.030 ms
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐