Docker 的使用和深入解析

Docker端口映射

#1. 端口映射(-p)
#格式:
-p80:81      -p宿主机端口:容器内部端口

[root@docker01 ~]# docker pull nginx:1.18.0

[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.18.0              741d47c34fe0        2 weeks ago         132MB

[root@docker01 ~]# docker tag 741d47c34fe0  qls123/nginx:v1.18.0

[root@docker01 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.18.0              741d47c34fe0        2 weeks ago         132MB
qls123/nginx        v1.18.0             741d47c34fe0        2 weeks ago         132MB

[root@docker01 ~]# docker run  --name nginx01 -d  -p81:80  qls123/nginx:v1.18.0

[root@docker01 ~]# docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                NAMES
1732bbfe4b8f        qls123/nginx:v1.18.0   "nginx -g 'daemon of…"   4 seconds ago       Up 3 seconds        0.0.0.0:81->80/tcp   nginx01

[root@docker01 ~]# netstat  -lntp        
tcp6       0      0 :::81                   :::*                    LISTEN      2000/docker-proxy   

[root@docker01 ~]# curl 127.0.0.1:81

Docker挂载数据卷

#baidu的首页
[root@docker01 ~]# mkdir  html
[root@docker01 ~]# cd html
[root@docker01 html]# wget www.baidu.com -O index.html

#运行容器进行挂载(-v)  
##-v宿主机的目录:容器的目录
[root@docker01 html]# docker run --name nginx02 -d  -p82:80  -v/root/html:/usr/share/nginx/html  qls123/nginx:v1.18.0

[root@docker01 html]# docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                NAMES
07565a867000        qls123/nginx:v1.18.0   "nginx -g 'daemon of…"   4 seconds ago       Up 4 seconds        0.0.0.0:82->80/tcp   nginx02

[root@docker01 html]# curl 127.0.0.1:82

#查看挂载信息 
[root@docker01 html]# docker inspect  07565a867000 | grep /usr/share
                "/root/html:/usr/share/nginx/html"
                "Destination": "/usr/share/nginx/html"

Docker容器传递环境变量

#-e      #传递环境变量  
[root@docker01 html]# docker run --rm -e TEST=hello qls123/nginx:v1.18.0  printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=16526ff23fff
TEST=hello
NGINX_VERSION=1.18.0
NJS_VERSION=0.4.0
PKG_RELEASE=1~buster
HOME=/root

Docker容器内安装软件

[root@docker01 html]# docker ps  -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                NAMES
07565a867000        qls123/nginx:v1.18.0   "nginx -g 'daemon of…"   13 minutes ago      Up 13 minutes       0.0.0.0:82->80/tcp   nginx02

[root@docker01 html]# docker exec -ti  nginx02  /bin/bash
tee /etc/apt/sources.list << EOF
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
EOF

root@07565a867000:/# tee /etc/apt/sources.list << EOF
> deb http://mirrors.163.com/debian/ jessie main non-free contrib
> deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
> EOF

root@07565a867000:/# apt-get update && apt-get install curl -y

root@07565a867000:/# apt-get install inetutils-ping -y

[root@docker01 html]# docker commit -p 07565a867000  qls123/nginx:1.18.0-curl

[root@docker01 html]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
qls123/nginx        1.18.0-curl         eb440e397100        8 seconds ago       153MB

[root@docker01 html]# docker push qls123/nginx:1.18.0-curl

Docker容器的生命周期

1. 检查本地是否存在镜像,如果没有则从远程官方仓库查询下载 

2. 利用镜像启动容器  

3. 分配一个文件系统,并在只读的镜像层外挂载一层可读可写层 这个就是容器 

4. 从宿主机配置的网桥接口中桥接一个虚拟接口到容器   

5. 从地址池配置一个IP地址给容器  

6. 执行用户指定的命令 

7. 执行完毕后容器终止 

#了解更多的docker指令 

[root@docker01 html]# docker --help

Dockerfile应用

如何自定义一个镜像

docker  commit   
黑箱操作: 不知道别人在里面做了写什么,维护非常困难   不建议通过commit方式来创建镜像  
简单,方便    

Dockerfile制作镜像   
就是一个文本文件   文件名只能是Dockerfile   里面其实就是一组组命令  

docker  build  进行构建镜像   

Dockerfile的规则

1. 格式  
#注释
指令大写,内容小写    大小写是没有太多的强制要求,  我们强烈要求使用指令大写,内容小写  

2. Dockerfile是按照顺序执行里面的指令的 从上到下依次执行  

3. 每一个dockerfile的第一个非注释指令,必须是“FROM”用户为镜像文件创建的过程中,指定的基础镜像  

4. 在实践中,基础镜像可以是任何可用的镜像文件,默认情况下,docker build会在本地查找dockerfile上面指定的镜像,当本地不存在这个镜像时,则会从官方远程仓库拉取 

Dockerfile核心指令

FROM        #指定基础镜像  

USER        #指定运行的用户  

WORKDIR     #指定容器的工作目录  

COPY        #复制文件

ADD         #高级复制,会自动解压文件

RUN         #执行的命令  

EXPOSE      #指定对外的端口,用到的不多  -p   -P

ENV         #设置环境变量  

CMD         #容器启动后执行的命令 

ENTRYPOINT  #容器启动后执行的命令

RUN         #执行命令并创建新的镜像层,通常用于安装软件包

CMD         #设置容器启动后默认执行的命令及其参数,但CMD设置的命令能够被docker run命令后面的命令行参数替换

ENTRYPOINT  #配置容器启动时的执行命令(不会被忽略,一定会被执行,即使运行 docker run时指定了其他命令) 

USER/WORKDIR指令

[root@docker01 ~]# mkdir /data/dockerfile -p
[root@docker01 ~]# cd /data/dockerfile/
[root@docker01 dockerfile]# vim Dockerfile
FROM qls123/nginx:v1.18.0
USER nginx
WORKDIR /usr/share/nginx/html

[root@docker01 dockerfile]# docker build . -t qls123/nginx:v1.18.0_with_user_workdir

[root@docker01 dockerfile]# docker images |grep with_user_workdir
qls123/nginx        v1.18.0_with_user_workdir   4330bb7b48b9        43 seconds ago      132MB

[root@docker01 dockerfile]# docker run --rm -ti --name nginx03 qls123/nginx:v1.18.0_with_user_workdir  /bin/bash
nginx@4430adea4186:/usr/share/nginx/htmlpwd
/usr/share/nginx/html
nginx@4430adea4186:/usr/share/nginx/html whoami
nginx
nginx@4430adea4186:/usr/share/nginx/html$ exit
exit

ADD/EXPOSE指令

[root@docker01 dockerfile]# cat Dockerfile
FROM qls123/nginx:v1.18.0
ADD  html/index.html  /usr/share/nginx/html/index.html
EXPOSE 80

[root@docker01 dockerfile]# docker build . -t qls123/nginx:v1.18.0_with_index_expose

[root@docker01 dockerfile]# docker images | grep with_index_expose
qls123/nginx        v1.18.0_with_index_expose   3ec08a1f4e21        49 seconds ago      132MB

[root@docker01 dockerfile]# docker run  -d --name nginx04  
qls123/nginx:v1.18.0_with_index_expose   /bin/bash

[root@docker01 dockerfile]# docker ps -a
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                   NAMES
1977de4e3cd0        qls123/nginx:v1.18.0_with_index_expose   "nginx -g 'daemon of…"   5 seconds ago       Up 4 seconds        0.0.0.0:32768->80/tcp   nginx04


[root@docker01 dockerfile]# netstat  -lntp
tcp6       0      0 :::32768                :::*                    LISTEN      14207/docker-proxy  

[root@docker01 dockerfile]# curl 127.0.0.1:32768

[root@docker01 dockerfile]# docker exec -ti nginx04 /bin/bash
root@1977de4e3cd0:/# pwd
/
root@1977de4e3cd0:/# ls /usr/share/nginx/html
50x.html  index.html

RUN/ENV指令

[root@docker01 dockerfile]# cat Dockerfile
FROM centos:7.7.1908
ENV VER 4.9.2
RUN yum install -y tcpdump-$VER

[root@docker01 dockerfile]# docker build . -t qls123/centos:7.7.1908_with_env_run

[root@docker01 dockerfile]# docker images | grep centos
qls123/centos       7.7.1908_with_env_run       428dfd24f45b        39 seconds ago      276MB

[root@docker01 dockerfile]# docker run --rm -ti qls123/centos:7.7.1908_with_env_run  /bin/bash

[root@fcc5a8b2c4a1 /]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)

[root@fcc5a8b2c4a1 /]# printenv | grep VER
VER=4.9.2

[root@fcc5a8b2c4a1 /]# tcpdump --version
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  26 Jan 2017

[root@fcc5a8b2c4a1 /]# exit
exit

CMD/ENTPYPOINT指令

[root@docker01 dockerfile]# cat Dockerfile
FROM centos:7.7.1908
RUN  yum install httpd -y
CMD  ["httpd","-D","FOREGROUND"]

[root@docker01 dockerfile]# docker build . -t qls123/centos:7.7.1908_with_httpd

[root@docker01 dockerfile]# docker images
REPOSITORY          TAG                         IMAGE ID            CREATED             SIZE
qls123/centos       7.7.1908_with_httpd         f7fb892b142a        27 seconds ago      308MB

[root@docker01 dockerfile]# docker run --rm -d --name httpd01 -p83:80   qls123/centos:7.7.1908_with_httpd

[root@docker01 dockerfile]# docker ps -a
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                   NAMES
4b5a0991571d        qls123/centos:7.7.1908_with_httpd        "httpd -D FOREGROUND"    12 seconds ago      Up 11 seconds       0.0.0.0:83->80/tcp      httpd01

[root@docker01 dockerfile]# netstat  -lntp |grep  83
tcp6       0      0 :::83                   :::*                    LISTEN      14896/docker-proxy 

ENTPYPOINT指令

[root@docker01 dockerfile]# cat Dockerfile
FROM centos:7.7.1908
COPY  entrypoint.sh /entrypoint.sh
RUN  yum install epel-release -y &&  yum install -y nginx
ENTRYPOINT /entrypoint.sh

#编写脚本
[root@docker01 dockerfile]# cat entrypoint.sh
#!/bin/bash
/sbin/nginx -g "daemon off;"
[root@docker01 dockerfile]# chmod +x entrypoint.sh

[root@docker01 dockerfile]# docker build . -t  qls123/centos:7.7.1908_with_entrypoint

[root@docker01 dockerfile]# docker images
REPOSITORY          TAG                         IMAGE ID            CREATED             SIZE
qls123/centos       7.7.1908_with_entrypoint    31d6ad566c7f        27 seconds ago      389MB

[root@docker01 dockerfile]# docker run  -d --name nginx06   -p84:80  qls123/centos:7.7.1908_with_entrypoint

[root@docker01 dockerfile]# docker ps -a
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS              PORTS                   NAMES
99b1852dfe89        qls123/centos:7.7.1908_with_entrypoint   "/bin/sh -c /entrypo…"   4 seconds ago       Up 3 seconds        0.0.0.0:84->80/tcp      nginx06

[root@docker01 dockerfile]# netstat  -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp6       0      0 :::84                   :::*                    LISTEN      15281/docker-proxy  

Docker综合实验

使用域名的方式访问百度首页

实现小游戏

[root@docker01 dockerfile]# cat Dockerfile
FROM qls123/nginx:v1.18.0
USER root
ENV WWW /usr/share/nginx/html
ENV CONF /etc/nginx/conf.d
RUN echo 'Asia/Shanghai' >/etc/timezone
ADD xiaoniao.tar.gz WWW/
ADD xiaoniao.com.confCONF/xiaoniao.com.conf
CMD ["nginx","-g","daemon off;"]

[root@docker01 dockerfile]# cat xiaoniao.com.conf
server {
    listen 80;
    server_name xiaoniao.com;
    root /usr/share/nginx/html/xiaoniao;
}

[root@docker01 dockerfile]# docker build . -t qls123/nginx:v1.18.0_with_xiaoniao

[root@docker01 dockerfile]# docker images
REPOSITORY          TAG                         IMAGE ID            CREATED             SIZE
qls123/nginx        v1.18.0_with_xiaoniao       7dc18f3dbbae        17 seconds ago      132MB

[root@docker01 dockerfile]# docker run --rm -d --name xiaoniao -p81:80  qls123/nginx:v1.18.0_with_xiaoniao

[root@docker01 dockerfile]# docker ps -a
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                NAMES
3522a2f9a357        qls123/nginx:v1.18.0_with_xiaoniao   "nginx -g 'daemon of…"   3 seconds ago       Up 3 seconds        0.0.0.0:81->80/tcp   xiaoniao

Docker registry

本地镜像仓库       镜像注册中心  

普通的registry

[root@docker01 dockerfile]# mkdir -p /data/myregistry 
[root@docker01 dockerfile]# docker run -d -p5000:5000  --restart=always  --name registry -v/data/myregistry:/var/lib/registry  registry
#创建容器时没有添加参数  --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。 

[root@docker01 dockerfile]# docker images | grep registry
registry            latest                      708bc6af7e5e        4 months ago        25.8MB

[root@docker01 dockerfile]# docker ps -a
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                    NAMES
1cfb55998b06        registry                             "/entrypoint.sh /etc…"   50 seconds ago      Up 49 seconds       0.0.0.0:5000->5000/tcp   registry


[root@docker01 dockerfile]# netstat -lntp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name              
tcp6       0      0 :::5000                 :::*                    LISTEN      16571/docker-proxy  

[root@docker01 dockerfile]# docker tag  nginx:1.18.0   47.102.199.135:5000/qls/nginx:v1.18.0 

[root@docker01 dockerfile]# docker push  47.102.199.135:5000/qls/nginx:v1.18.0
The push refers to repository [47.102.199.135:5000/qls/nginx]
#报错:要求https访问,但此处用的的是http方式请求 
Get https://47.102.199.135:5000/v2/: http: server gave HTTP response to HTTPS client


#解决上述报错方法
[root@docker01 dockerfile]# cat /etc/docker/daemon.json
{
"graph": "/data/docker",
"storage-driver": "overlay2",
"insecure-registries": ["registry.access.redhat.com","quay.io","47.102.199.135:5000"],
"registry-mirrors": ["https://q2gr04ke.mirror.aliyuncs.com"],
"bip": "172.151.143.1/24",
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true
}

[root@docker01 dockerfile]# systemctl  restart docker

[root@docker01 dockerfile]# docker push  47.102.199.135:5000/qls/nginx:v1.18.0

[root@docker01 dockerfile]# ll /data/myregistry/docker/registry/v2/repositories/qls/nginx/
total 12
drwxr-xr-x 3 root root 4096 Jun  3 15:52 _layers
drwxr-xr-x 4 root root 4096 Jun  3 15:53 _manifests
drwxr-xr-x 2 root root 4096 Jun  3 15:53 _uploads

#拉取本地仓库镜像
[root@docker01 dockerfile]# docker pull 47.102.199.135:5000/qls/nginx:v1.18.0

#其他主机上传下载 
[root@docker01 ~]# docker pull 47.102.199.135:5000/qls/nginx:v1.18.0
v1.18.0: Pulling from qls/nginx

[root@docker01 ~]# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
qls123/alpine                   v3.12.0             a24bb4013296        4 days ago          5.57MB
47.102.199.135:5000/qls/nginx   v1.18.0             741d47c34fe0        2 weeks ago         132MB
hello-world                     latest              bf756fb1ae65        5 months ago        13.3kB
[root@docker01 ~]# docker tag a24bb4013296  47.102.199.135:5000/qls/alpine:v3.12.0
[root@docker01 ~]# docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
47.102.199.135:5000/qls/alpine   v3.12.0             a24bb4013296        4 days ago          5.57MB

[root@docker01 ~]# docker push 47.102.199.135:5000/qls/alpine:v3.12.0

带basic认证的registry

删除仓库里面的镜像

#删除repo
/ # rm -rf /var/lib/registry/docker/registry/v2/repositories/qls/nginx/

#清除blob
/ # registry garbage-collect  /etc/docker/registry/config.ym

Docker网路模型

NAT(默认) Bridge

[root@docker01 ~]# docker exec -ti 2b5c6a379cda /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:97:8f:02 brd ff:ff:ff:ff:ff:ff
    inet 172.151.143.2/24 brd 172.151.143.255 scope global eth0
       valid_lft forever preferred_lft forever

None

#不为容器配置任何网络  
[root@docker01 ~]# docker run -ti --rm --net=none  alpine  /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever

Host

#与宿主机共享网络    性能最高    
[root@docker01 ~]# docker run -ti --rm --net=host   alpine:latest  /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:0c:f5:f8 brd ff:ff:ff:ff:ff:ff
    inet 172.19.151.143/20 brd 172.19.159.255 scope global dynamic eth0
       valid_lft 315329713sec preferred_lft 315329713sec
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ba:16:7c:80 brd ff:ff:ff:ff:ff:ff
    inet 172.151.143.1/24 brd 172.151.143.255 scope global docker0
       valid_lft forever preferred_lft forever
37: veth15e9b65@if36: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0 state UP 
    link/ether 4e:cb:a7:65:21:80 brd ff:ff:ff:ff:ff:ff

联合网络

#与另一个运行中的容器共享网络  
[root@docker01 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
2b5c6a379cda        registry            "/entrypoint.sh /etc…"   47 minutes ago      Up 47 minutes       0.0.0.0:5000->5000/tcp   sad_meninsky

[root@docker01 ~]# docker exec -ti  2b5c6a379cda /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:97:8f:02 brd ff:ff:ff:ff:ff:ff
    inet 172.151.143.2/24 brd 172.151.143.255 scope global eth0
       valid_lft forever preferred_lft forever


[root@docker01 ~]# docker run -ti --rm --net=container:2b5c6a379cda  alpine:latest  /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
36: eth0@if37: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:ac:97:8f:02 brd ff:ff:ff:ff:ff:ff
    inet 172.151.143.2/24 brd 172.151.143.255 scope global eth0
       valid_lft forever preferred_lft forever

Docker-Compose应用

单机编排工具

通过yaml文件进行 
工程 project 
服务 service  
容器 container   

使用docker-compose安装wordpress

#安装Docker-compose
[root@docker01 ~]# yum install -y docker-compose

[root@docker01 ~]# docker-compose  -v
docker-compose version 1.18.0, build 8dd22a9

[root@docker01 ~]# mkdir /data/docker-compose
[root@docker01 ~]# cd /data/docker-compose
[root@docker01 docker-compose]# mkdir wordpress
[root@docker01 docker-compose]# cd wordpress

[root@docker01 wordpress]# cat docker-compose.yaml
version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - web_data:/var/www/html
     ports:
       - "80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
    web_data:

#后台启动容器
[root@docker01 ~]# docker-compose  up -d

[root@docker01 ~]# docker  ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
53d59cde1a0d        wordpress:latest    "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        0.0.0.0:32768->80/tcp    wordpress_wordpress_1
3e29e83fc01d        mysql:5.7           "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        3306/tcp, 33060/tcp      wordpress_db_1

docker-compose常用命令

# 启动所有容器 
docker-compose  up  

#放入到后台运行   
docker-compose  -d     

#停用移除所有容器以及网络相关
docker-compose  down   

#列出项目中所有的容器
docker-compose  ps
        Name                       Command               State           Ports        
--------------------------------------------------------------------------------------
wordpress_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp  
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:32770->80/tcp

#停止正在运行的容器
[root@docker01 wordpress]# docker-compose  stop 

#启动已经存在的服务容器
[root@docker01 wordpress]# docker-compose  start

#查看服务容器的输出
[root@docker01 wordpress]# docker-compose  logs

Docker跨主机容器之间的通信

#查看local网络信息 
[root@docker01 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
8a69b5227305        bridge              bridge              local
0ef42ec5e12e        host                host                local
76a3e990ef90        none                null                local

创建macvlan网络

[root@docker01 ~]# docker network create  --driver macvlan  --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1 

[root@docker01 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
d1cdabe73593        macvlan_1           macvlan             local

[root@docker01 ~]# docker run --rm -ti --network macvlan_1 --ip=10.0.0.101  qls123/alpine:v3.12.0  /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
47: eth0@if44: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 02:42:0a:00:00:65 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.101/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever

/ # ping 10.0.0.102
PING 10.0.0.102 (10.0.0.102): 56 data bytes
64 bytes from 10.0.0.102: seq=0 ttl=64 time=0.326 ms
64 bytes from 10.0.0.102: seq=1 ttl=64 time=0.350 ms


[root@docker02 ~]# docker run --rm -ti --network macvlan_1 --ip=10.0.0.102   alpine:3.12.0  /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
9: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UNKNOWN 
    link/ether 02:42:0a:00:00:66 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.102/24 brd 10.0.0.255 scope global eth0
       valid_lft forever preferred_lft forever

/ # ping 10.0.0.101
PING 10.0.0.101 (10.0.0.101): 56 data bytes
64 bytes from 10.0.0.101: seq=0 ttl=64 time=2.328 ms
64 bytes from 10.0.0.101: seq=1 ttl=64 time=0.611 ms
Copyright © 2009 - Now . XPBag.com . All rights Reserved.
夜心的小站 » Docker 的使用和深入解析

提供最优质的资源集合

立即查看 了解详情