docker学习笔记


一、安装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知识自己整理的笔记,给大家做一个参考!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值