文章目录
一、安装docker
******************安装docker***********************
1.安装utils
yum install -y yum-utils
2.添加软件源信息(这里用阿里云的比较快)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装ce
yum install docker-ce docker-ce-cli containerd.io
4.启动docker
systemctl start docker
检查docker版本: docker --version
--------------docker的启动与停止---------------
启动: systemctl start docker
停止: systemctl stop docker
重启: systemctl restart docker
设置开机启动: systemctl enable docker
查看docker状态: systemctl status docker
查看docker内容器状态:docker stats
产看docker概要信息:docker info
查看docker帮助文档:docker --help
---------------------------------------------------
5.测试docker是否安装正常
docker run hello-world
出现以下信息表示安装成功:
Hello from Docker!
This message shows that your installation appears to be working correctly.
**********************************************************
二、配置阿里云镜像加速
*************配置阿里云镜像加速器**********************
前提:注册阿里云账户,登录后,通过 搜索 进入 “容器镜像服务”---“镜像加速器”,拿到对应的加速地址
1.配置阿里云镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.xxx.aliyuncs.com"]
}
EOF
2.重新加载docker服务配置文件
sudo systemctl daemon-reload
3.重启docker服务
sudo systemctl restart docker
***********************************************************
三、常用命令
1.docker常用命令
******************docker常用的命令**********************
1.查看docker所有镜像
docker images
2.拉取镜像(不运行): docker pull 镜像名称:标签
拉取镜像并运行 docker run 镜像名称:标签
【如果不指定标签,默认是latest】
3.删除镜像
docker rmi 镜像名称:标签
docker rmi 镜像ID
【如果不指定标签,默认是latest】
4.搜索镜像
docker search 镜像名称
***********************************************************
2.容器相关命令
***********************容器相关命令**************************
1.查看所有的容器
docker ps -a
查看正在运行的容器:docker ps
过滤查询:docker ps -f status=exited
查看最后运行的容器:docker ps -l
产看最后运行的nums个容器:docker ps -l -n nums
2.启动容器
创建并进入容器 : docker run -it --name 容器别名 -p 宿主机端口:容器端口 镜像名称
eg: docker run --name mynginx -p 8000:80 nginx
/*解释:
创建nginx容器并进入nginx容器,--name表示给容器起的别名是mynginx,
-i表示运行容器 -t表示启动后会进入其命令行,加上-it会创建一个虚拟终端进入登录
-p表示端口号映射(小写p), 8000:80 表示将容器的80端口和宿主机的8000端口进行绑定
*/
eg:docker run --name mynginx -P nginx 大写P表示不指定端口号
后台方式运行容器: docker run -id --name 容器别名 -p 宿主机端口:容器端口 镜像名称
eg: docekr run -id --name mynginx -p 8088:80 nginx
后台方式进入容器命令行:docker exec -it 容器别名 /bin/bash
eg: docker exec -it mynginx /bin/bash
3.删除容器 **容器必须处于停止状态
docker -rm 容器名
docker -rm 容器ID
4.退出容器
exit
5.停止启动已有的容器
启动: docker start 容器名称/容器ID
停止: docker stop 容器名称/容器ID
6.文件拷贝
docker cp 宿主机文件路径 容器名称:目标文件路径 宿主机文件拷贝到容器中的指定路径
docker cp 容器名称:源文件路径 宿主机目标文件路径 将容器内的文件拷贝到宿主机的指定路径
***********************************************************
四、目录挂载
************************目录挂载****************************
1.指定目录挂载
创建容器的时候指定挂载
eg: docker run -di --name nginx02 -p 8089:80 -v 宿主机目录路径:容器目录路径 nginx
/*解释:
创建容器对象nginx2的时候,【-v表示挂载】将容器下的指定目录挂载到宿主机的指定目录上,
此时容器目录和宿主机目录同步,当删除容器目录的时候,宿主目录下的数据不会被删除,保证了数据的安全性。
*/
如果创建容器的时候没有指定挂载宿主机目录,那么有两种方案解决:
(1)将容器上存放数据的目录拷贝到宿主机上,删除该容器并重新创建一个该容器的时候将拷贝出来的目录挂载上
(2)修改配置文件 结合: docker inspect 容器名称 该命令用来查看容器的详细信息
2.匿名挂载(卷的名字是随机的) 最终数据都在/var/lib/docker/volumes/
eg: docker run -di -v /sur/local/data --name centos7-01 centos:7
/*解释:
创建容器的时候将容器cenos7-01下的/sur/local/data 匿名挂载到宿主机上
*/
匿名挂载找不到挂载点路径可以使用 docker inspect centos7-01来找到具体的挂载点
3.具名挂载 (卷的名字指定) 最终数据都在/var/lib/docker/volumes/
eg: docker run -di -v centos7-02-data:/usr/local/data --name centos7-02 centos:7
/*解释:
创建容器的时候将容器centos7-02下的/usr/local/data 指定挂载目录名称为centos7-02-data
进入宿主机的/var/lib/volumes/发现下面出现一个centos7-02-data目录
*/
4.继承挂载
eg: docker run -di --name centos7-03 --volumes-from centos7-02:ro centos:7 只读挂载
docker run -di --name centos7-03 --volumes-from centos7-02:rw centos:7 读写挂载
/*解释:
创建容器centos7-03,并且继承centos7-02容器的挂载,并指定其为只读挂载
【--volumes-from关键字表示继承】
*/
5.查看目录的挂在信息
(1)docker volume inspect 挂载卷名字 比较粗略,需要提前直到挂载卷的名称才能找到对应的挂载路径
(2)docker insepect 容器名称 查看指定容器的IP地址,挂载目录等信息,比较详细
***********************************************************
五、创建镜像
1.docker commit 创建镜像
docker commit 将现有的容器创建为一个新的镜像
语法:
docker commit -a="作者信息" -m="构建信息" 容器名称 构建的镜像名字:标签
eg:例如在基础的centos7下安装jdk和tomcat,并将其命名为新的镜像centos7-jdk-tomcat
docker commit -a="wjz" -m="static-web-server" centos7-01 centos7-jdk-tomcat:标签
2.docker build 创建镜像
docker build需要配合Dockerfile文件创建镜像
(1)Dockerfile 常用命令
--------------Dockerfile常用命令-------------------
(1)FROM <image>:<tag>
指明构建的新镜像是来自于哪个基础镜像,如果没有选择tag,那么默认值为latest
FROM centos:7
RROM scratch 构建一个空镜像,可以说是从零开始构建属于自己的镜像
(2)LABEL <key>=<value> <key>=<value> <key>=<value>
功能是为镜像指定标签,也可以使用LABEL来指定镜像作者。
LABEL maintainer=<"xxxx.com">
(3)RUN <command>
构建镜像时运行的Shell命令,比如构建的新镜像中我们想在/usr/local目录下创建一个java目录
RUN mkdir -p /usr/local/java
(4)ADD <src> <dest>
拷贝文件或目录到镜像中。src可以是一个本地文件或者是一个本地压缩文件,压缩文件会自动解压。还可以是一个url,如果把
src写成一个url,那么ADD就类似于wget命令,然后自动下载和解压
ADD jdk-8u281-linux-x64.tar.gz /usr/local/jdk
(5)COPY <src> <dest>
拷贝文件或目录到镜像中。用法同ADD,只是不支持自动下载和解压。
COPY jdk-8u281-linux-x64.tar.gz /usr/local/jdk
(6)EXPOSE <port> [<port>/{<protocol>]
暴露容器运行时候的监听端口给外部,可以指定端口是监听TCP还是UDP,如果未指定协议,默认是TCP
EXPOSE 80 443 8000/tcp
若需要使得容器与宿主机的端口有映射关系,必须在容器启动的时候加上 -P参数
(7)ENV <key> <value> 添加单个, ENV <key>=<value> <key>=<value> ... 添加多个。
设置容器内环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_281/
(8)CMD ["executable", "param1", "param2"] eg: CMD ["/usr/local/tomcat/bin/startup.sh", "run"]
CMD ["param1", "param2"] eg: CMD ["echo", "$JAVA_HOME"]
CMD command param1 param2 eg: CMD echo $JAVA_HOME
启动容器时执行的Shell命令。 在Dockerfile中只能有一条CMD命令。如果设置了多条CMD指令,只有最后一条CMD会生效
eg: CMD echo $JAVA_HOME
如果创建容器的时候指定了命令,则CMD命令会被题代。若镜像叫做Centos:7 创建容器时候的命令是 :docker run -it --name centos:7 echo "helloworld"
或者docker run -it --name centos7 centos:7 /bin/bash, 就不会输出 JAVA_HOME的环境变量信息。因为CMD命令被 echo "helloworld" 、 /bin/bash 覆盖了。
(9)ENTRYPOINT ["executable", "param1", "param2"] eg: ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh", "run"]
ENTRYPOINT command param1 param2 eg: ENTRYPOINT echo $JAVA_HOME
启动容器时执行的Shell命令。(与CMD类似,区别在于不会被docker run命令行指定的参数所覆盖) 在Dockerfile中只能有一条ENTRYPOINT命令。如果设置了多条CMD指令,只有最后一条CMD会生效
eg: ENTRYPOINT echo $JAVA_HOME
---说明---
如果在Dockerfile中同时写了ENTRYPOINT 和 CMD, 并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为
ENTRYPOINT的参数
如果在Dockerfile中同时写了ENTRYPOINT 和 CMD, 并且CMD指令是一个完整的可执行命令,那么谁在最后谁生效
(10)WORKDIR /path/to/workdir
为RUN、CMD、ENTRYPOINT以及AND设置工作目录。
eg: WORKDIR /usr/local
(11)VOLUMN
指定容器挂载点到宿主机自动生成的目录或其他容器。一般的使用场景为需要持久化存储数据时。
eg: VOLUMN ["/var/lib/mysql"] 容器的/var/lib/mysql目录会自动在运行的时候自动挂载为匿名卷
***一般不会在Dockerfile中使用 常见的是在docker run 的时候通过 -v 指定挂载卷
-------------------------------------------------------------
(2)Dockerfile 创建镜像并实例化容器案例
1.在宿主机上创建目录存放制作镜像的资源以及Dockerfile文件
[root@localhost~]#mkdir /usr/local/dockerfile
2.将制作镜像的资源拷贝到该目录下面
[root@localhost dockerfile]# ls
apache-tomcat-8.5.64.tar.gz jdk-8u281-linux-x64.tar.gz
3.创建Dockerfile文件,并将以下内容拷贝到该文件中
[root@localhost dockerfile]#touch Dockerfile
[root@localhost dockerfile]# ls
apache-tomcat-8.5.64.tar.gz Dockerfile jdk-8u281-linux-x64.tar.gz
[root@localhost dockerfile]#vim Dockerfile
------------------------------------------------------------------------------------------
#创建基础镜像
FROM centos:7
#通过镜像标签声明作者信息
LABEL maintainer="wjz"
#设置工作目录
WORKDIR /usr/local
#新镜像构建成功后创建指定目录
RUN mkdir -p /usr/local/jdk/ && mkdir -p /usr/local/tomcat/
#拷贝文件到指定镜像中并解压
ADD jdk-8u281-linux-x64.tar.gz /usr/local/jdk/
ADD apache-tomcat-8.5.64.tar.gz /usr/local/tomcat/
#暴露容器运行时的 8080 监听端口给外部
EXPOSE 8080
#设置容器内 JAVA_HOME 环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_281/
ENV PATH $PATH:$JAVA_HOME/bin
#启动容器时启动 tomcat
CMD ["/usr/local/tomcat/apache-tomcat-8.5.64/bin/catalina.sh", "run"]
--------------------------------------------------------------------------------------
4.创建docker镜像
语法:docker build -f Dockerfile文件路径 -t 镜像名称:标记 制作镜像时需要的资源所在的路径
[root@localhost dockerfile]# docker build -f Dockerfile -t jdk-apache-centos7:1 /usr/local/dockerfile/
Sending build context to Docker daemon 154.2MB
Step 1/10 : FROM centos:7
---> 8652b9f0cb4c
Step 2/10 : LABEL maintainer="wjz"
---> Running in 71033c84c91a
Removing intermediate container 71033c84c91a
---> b13a1ba988d9
Step 3/10 : WORKDIR /usr/local
---> Running in 49ea4fe1e104
Removing intermediate container 49ea4fe1e104
---> 5a680ba2ad2c
Step 4/10 : RUN mkdir -p /usr/local/jdk/ && mkdir -p /usr/local/tomcat/
---> Running in 862f0949bb66
Removing intermediate container 862f0949bb66
---> 03a9c0531d53
Step 5/10 : ADD jdk-8u281-linux-x64.tar.gz /usr/local/jdk/
---> d80776c3c7e0
Step 6/10 : ADD apache-tomcat-8.5.64.tar.gz /usr/local/tomcat/
---> 92d99b4f5507
Step 7/10 : EXPOSE 8080
---> Running in cf6f14103c4e
Removing intermediate container cf6f14103c4e
---> 7db3a10e2c02
Step 8/10 : ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_281/
---> Running in fe889401c646
Removing intermediate container fe889401c646
---> 79cfa979dad8
Step 9/10 : ENV PATH $PATH:$JAVA_HOME/bin
---> Running in 0dab7295ea59
。。。。。。不再说明,自己看
5.检查有没有生成镜像
[root@localhost dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk-apache-centos7 1 0c89748705cb About a minute ago 575MB
centos 7 8652b9f0cb4c 4 months ago 204MB
6.实例化创建的新镜像创建容器
[root@localhost dockerfile]# docker run -di --name jdk-apache -p 8989:8080 jdk-apache-centos7:1
[root@localhost dockerfile]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b72f15cbcd3a jdk-apache-centos7:1 "/usr/local/tomcat/a…" 39 seconds ago Up 38 seconds 0.0.0.0:8989->8080/tcp jdk-apache
发现该容器创建成功,打开网址(我的宿主机是192.168.1.110)访问http://192.168.1.110:8989,出现tomcat页面就说明创建成功了。
六、镜像备份、恢复、迁移
备份、恢复方法:
1.将指定镜像保存为.tar文件,需要时将.tar包恢复为镜像。
2. 将镜像推送到DockerHub中心,需要的时候拉下来即为恢复。
3. 搭建私有镜像仓库,将镜像推送到私有镜像仓库。
迁移即备份、恢复两个过程。
1. tar包方式
**************************************************************
1.镜像备份
[root@localhost dockerfile]# docker save -o 存放镜像的路径/镜象包的名字 镜像名称:标记
[root@localhost dockerfile]# docker save -o /docker_study/jdk-apache-centos7_1.tar jdk-apache-centos7:1
[root@localhost dockerfile]# cd /docker_study
[root@localhost docker_study]# ls
[root@localhost docker_study]# jdk-apache-centos7_1.tar
2.镜像恢复
[root@localhost dockerfile]# docker load -i 镜像包路径/镜像包名字
[root@localhost dockerfile]# docker load -i /docker_study/jdk-apache-centos7_1.tar
eb4a90ca809e: Loading layer 3.072kB/3.072kB
747213bc3191: Loading layer 357.4MB/357.4MB
88077573f5b7: Loading layer 15.2MB/15.2MB
Loaded image: jdk-apache-centos7:1
3.查看是否恢复过来了
[root@localhost dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk-apache-centos7 1 0c89748705cb 48 minutes ago 575MB
**************************************************************
2. 镜像中心方式
**********************镜像中心使用**************************
(非常慢)
1.注册hub.docker.com
2.命令行登入 docker login 输入账户密码
3.给镜像创建标签(这里以hello-wrold为例)
[root@localhost dockerfile]# docker tag 镜像名称:镜像标记 账号/重新命名镜像名称:重新命名镜像标记
[root@localhost dockerfile]# docker tag hello-world:latest wjiaz/test-hello-world:1.0.0.0
查看镜像会发现一个新的镜像
[root@localhost dockerfile]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wjiaz/test-hello-world 1.0.0.0 d1165f221234 3 weeks ago 13.3kB
4.推送至hub.docker.com镜像中心
[root@localhost dockerfile]# docker push 账号/重新命名的镜像名称:重新命名的标记
[root@localhost dockerfile]# docker push wjiaz/test-hello-world:1.0.0.0
The push refers to repository [docker.io/wjiaz/test-hello-world]
f22b99068db9: Mounted from library/hello-world
1.0.0.0: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
5.退出账号
[root@localhost dockerfile]# docker logout
Removing login credentials for https://index.docker.io/v1/
****************************************************************
3. 搭建私有仓库
***********************搭建私有仓库***************************
registry镜像搭建私有仓库
1.修改配置文件
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxx.xxxx.aliyuncs.com"],
"insecure-registries": ["192.168.1.110:5000"]
}
2.重新加载配置文件,重启docker
systemctl daemon-reload
systemctl restart docker
3.创建容器,绑定端口,挂载目录卷
[root@localhost ~]# docker run -di --name registry -p 5000:5000 -v /mydata/docker_registry:/var/lib/registry registry
1f850f6d6385d0d99c62a0fe2df12933856184ed8f4ea4c35ec9d4aa46a9ca2e
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f850f6d6385 registry "/entrypoint.sh /etc…" 12 seconds ago Up 10 seconds 0.0.0.0:5000->5000/tcp registry
浏览器进入:http://192.168.1.110:5000/v2/_catalog 发现进入是个空就成功了。{"repositories":[]}
4.打标签,推送
打标签
[root@localhost ~]# docker tag hello-world:latest 192.168.1.110:5000/test-hello-world:1.0.0.1
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk-apache-centos7 1 0c89748705cb 2 hours ago 575MB
mycentos 7 13fc64e21eff 5 hours ago 575MB
static-web-server-test 1 2c30a5ebefc0 7 hours ago 206MB
hello-world latest d1165f221234 3 weeks ago 13.3kB
wjiaz/test-hello-world 1.0.0.0 d1165f221234 3 weeks ago 13.3kB
192.168.1.110:5000/test-hello-world 1.0.0.1 d1165f221234 3 weeks ago 13.3kB
nginx latest f6d0b4767a6c 2 months ago 133MB
registry latest 678dfa38fcfa 3 months ago 26.2MB
centos 7 8652b9f0cb4c 4 months ago 204MB
推送:
[root@localhost ~]# docker push 192.168.1.110:5000/test-hello-world:1.0.0.1
The push refers to repository [192.168.1.110:5000/test-hello-world]
f22b99068db9: Pushed
1.0.0.1: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
查看存放镜像的目录结构是否存在。
5.其他人员拉去该地址的镜像时,执行
docker pull 192.168.1.110:5000/test-hello-world:1.0.0.1 拉取镜像
docker run --name hello-world 192.168.1.110:5000/test-hello-world:1.0.0.1 拉取镜像并创建容器
6.配置私有仓库认证
(1)创建整数认证目录
mkdir -p /usr/local/registry/certs
(2)生成整数认证
[root@localhost repositories]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt
填写信息
Generating a 2048 bit RSA private key
.................................+++
..+++
writing new private key to '/usr/local/registry/certs/domain.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:zh
Locality Name (eg, city) [Default City]:xa
Organization Name (eg, company) [Default Company Ltd]:xxxx
Organizational Unit Name (eg, section) []:xxxx
Common Name (eg, your name or your server's hostname) []:192.168.1.110
Email Address []:xxxxx@qq.com
(3)生成鉴权密码文件
[root@localhost repositories]# mkdir -p /usr/local/registry/auth
[root@localhost repositories]# yum install -y httpd
将生成的用户名和密码放在 /usr/local/registry/auth/htpasswd下
[root@localhost repositories]# htpasswd -Bbn root 11111 > /usr/local/registry/auth/htpasswd
删除之前没有密码的容器,重新创建新的容器(带认证)
docker run -di --name registry -p 5000:5000 \
-v /mydata/docker_registry:/var/lib/registry \
-v /usr/local/registry/certs:/certs \
-v /usr/local/registry/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry
打标签(与hub.docker.com方式类似)
docker tag hello-world:latest 192.168.1.110:5000/test-hello-world:1.0.0.2
登录私有仓库:
[root@localhost repositories]# docker login 192.168.1.110:5000
Username: root
Password: 11111
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
推送镜像成功:
[root@localhost repositories]# docker push 192.168.1.110:5000/test-hello-world:1.0.0.2
The push refers to repository [192.168.1.110:5000/test-hello-world]
f22b99068db9: Pushed
1.0.0.2: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
退出私有仓库:
docker logout 192.168.1.110:5000
*******************************************************************
七、容器通信
***************************容器通信*******************************
查看当前的网络状态(安装docker后默认的三种网络)
[root@localhost docker_study]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3edee3506dd2 bridge bridge local
ab9e177d3fc3 host host local
d92de8e1bd18 none null local
1. birdge:为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,默认是该模式。(查看网络配置。可以看到docker网桥)
[root@localhost docker_study]# 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:edff:fe13:7bdb prefixlen 64 scopeid 0x20<link>
ether 02:42:ed:13:7b:db txqueuelen 0 (Ethernet)
RX packets 39 bytes 9194 (8.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 56 bytes 7328 (7.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
关于bridge网络模式的使用,只需要在创建容器时通过参数 --net bridge 或者 --network bridge指定即可,当然这也是创建容器,默认使用的网络模式, 可以省略。
2. host:容器不会虚拟出自己的网卡以及配置自己的IP等。而是使用宿主机的IP和端口。
[root@localhost ~]# docker run -it --name busybox02 --network host busybox
3. none:容器有独立的Network amespace,但是没有对其进行任何网络配置,如分配veth paor和网桥连接,IP等。
none网络模式指急用网络功能,只有lo接口local的缩写。代表127.0.0.1 即local host本地环回接口。在创建容器的时候通过
参数 --netwrok none 或者 --net none指定
[root@localhost ~]# docker run -it --name busybox03 --network none busybox
/ # ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
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
/ #
4. container:新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围。
container网络模式是docker中一种特殊的网络模式。在创建容器的时候通过参数 --net container:已运行的容器名称|ID
或者 --network container:已运行的容器|ID 指定。
处于整个模式的docker容器会共享一个网络栈,这样两个容器之间可以通过localhost高效快速通信。
[root@localhost ~]# docker run -it --name busybox04 --network container:busybox01 busybox
查看地址发现他和busybox01的IP地址一样。
5. 自定义网络 bridge(根据容器名称进行通信)【启动容器名称到IP地址的自动解析】
(1)创建自定义网络 (网络模式为bridge)
[root@localhost docker_study]# docker network create cunstm_network
显示以下当前docker网络:
[root@localhost docker_study]# docker network ls
NETWORK ID NAME DRIVER SCOPE
3edee3506dd2 bridge bridge local
11701811f322 cunstm_network bridge local
ab9e177d3fc3 host host local
d92de8e1bd18 none null local
(2)创建一个两个容器,并且都指定为自定义的网络
[root@localhost docker_study]# docker run -it --name busybox06 --network cunstm_network busybox
[root@localhost docker_study]# docker run -it --name busybox07 --network cunstm_network busybox
查看两个容器的IP地址,发现两个容器之间可以相互IP地址ping通。用容器名称进行ping发现也可以ping通。
/ # ping busybox07
PING busybox07 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.186 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.981 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.225 ms
64 bytes from 172.18.0.3: seq=3 ttl=64 time=0.125 ms
*****************************************************************
总结
学习docker知识自己整理的笔记,给大家做一个参考!