制作镜像
Docker pull centos
#创建的容器名不能重复 Docker run –it –-name mycentos /bin/bash
#在宿主机执行命令 Docker cp apache-tomcat.tar.gz mycentos:/root Docker cp jdk.tar.gz mycentos:/root
(1)#在容器交互式界面解压jdk文件到容器的usr/local中 tar –zxvf jdk.tar.gz –c /usr/local (2)容器配置jdk环境变量 #在容器etc/profile加入以下代码 JAVA_HOME=/usr/local/jdk Export PATH=$JAVA_HOME/bin;$PATH source /etc/profile剩下环境变量
#在容器中 执行 (1)tar –zxvf apache-tomcat.tar.gz –c /usr/local/ (2)vi /usr/local/apache-tomcat/bin/setcalsspath.sh中配置java目录
#在宿主机中执行 Docker commit mycentos mytomcat
#将宿主机的8080端口映射为8888端口,制作容器t1 Docker run –itd --name=t1 –p 8888:8080 mytomcat /bin/bash
#在宿主机执行容器中tomcat中的启动脚本,也可以登录容器执行startup.sh Docker exec t1 /usr/local/apache-tomcat/bin/startup.sh
|
容器/镜像打包
#镜像打包后可以传到其他服务器使用
#将tomcat镜像打包成tomcat.tar文件,放在宿主机的root目录下,就可以吧tomcat.tar到其他服务器使用 Docker save -o /root/tomcat.tar mytomcat
Docker load –i /root/tomcat.tar #导入成功后,可以通过docker image 查看导入的镜像
#将容器t1打包成t1.tar Docker export –o /root/t1.tar t1
Docker import t1.tar mytomcat:latest |
用docker build制作镜像流程(DSL)
|
通过dockerfile构建镜像步骤
|
mkdir rw-test
FROM docker.io/centos #from指定一个基础镜像centos MAINTAINER ** #MAINTAINER执行作者名字与邮箱 RUN yum install –y *** #RUN代表安装的软件 ENTRYPOIN *** # ENTRYPOIN执行的指令,代表启动nginx服务
#-t后面的rw-nginx镜像名称,rm代表删除中间生成的临时容器,最后的.是当前目录下 Docker build –t rw_nginx --rm=true . #提示success就是构建成功 #查看构建的镜像 Docker images
#创建容器test_ngnix,将容器中ngnix服务的80端口映射为宿主机的8899端口,rw_nginx为我们本地镜像 Docker rn –itd –name test_nginx –p 8899:80 rw_nginx /bin/bash #启动镜像 Docker exec test_nginx /bin/bash |
镜像推送
#hello-world是镜像,latest是版本(最新的),1008801509033是仓库,test-hello-world上传到仓库中文件名(避免与仓库中的hello-world名字冲突,所以修改了名字),v2是版本 Docker tag hello-world:latest 108801509033/test-hello-world:v2
Docker login
#推送镜像之前必须登录仓库 Docker push 108001509033/test-hello-world
|
阿里云创建镜像仓库
创建之后,点击仓库名称,会有相关命令说明
|
搭建私有仓库
Docker run –d –p 5000:5000 --restart=always –name registry –v /mnt/registry:/var/lib/registry registry:2 -d 在后台运行 -p 端口映射 --restart=always:容器启动后自动启动本地私有镜像仓库 --name registry:生产的容器名为registry -v /mnt/registry:/var/lib/registry:容器内的默认存储的位置/var/lib/registry中的数据挂载到宿主机/mnt/registry目录下,这样容器销魂后,在容器中/var/lib/registry目录下的数据会自动被分到宿主机指定的目录
2. 重命名镜像,由于推送到本地私有镜像仓库的镜像名必须符合“仓库IP:端口号/repository”的形式,因此需要按照要求修改镜像名称,具体操作如下: Docker tag hello-world:latest localhost:5000/myhellodocker
Docker push localhost:5000/myhellodocker
查看本地仓库镜像 |
配置私有仓库认证
mkdir registry && cd registry && mkdir certs && cd certs
openssl req –x509 –days 3650 –subj `/CN=192.168.200.141:5000/` \ -nodes –newkety rsa:2048 –keyout domain.key –out domain.crt 说明: -x509:一个自签发证书的格式 -days 3650:有效期 192.168.200.141:5000 具体部署docker registry 本地镜像仓库的地址和端口 Rsa:2048:证书算法长度 Domain.key和domain.crt:生成的证书
Cd .. && mkdir auth Docker run –entrypoint htpasswd registry:2 –Bbn ruanwen 123456 > auth/htpasswd
Systemctl reload docker Systemctl restart docker
Docker login Docker tag helloworld:latest 192.168.200.141:5000/myhelloworld Docker push 192.168.200.141:5000/myhelloworld
|
Docker默认网络
Docker network ls #bridge:桥接的网络驱动,可以与宿主机通信,与外网通信 #host,none属于无网络,不能与外网通信。Bridge,host,none都是非集群的网络方式 #docker集群模式下还有docker_gwbridge和ingress两种网络 |
Docker网络查看
Docker network inspect bridge #使用bridge的容器 |
Docker自定义网络
Docker network create –driver bridge isolated_nw #创建一个基于bridge网络驱动,名称为isolated_nw Docker run –itd --name=nwtest --network=isolate_nw busybox #基于isolated_nw网络创建一个容器
Docker network connect bridge nwtest #为容器添加另一种名为nwtest的bridge网络 Docker network disconnect isolated_nw nwtest #断开网络 Docker network rm isolated_nw #删除网络
|
容器间通信
1.创建两个基于bridge的两个容器 Docker run –itd --name=C1 busybox Docker run –itd --name=C2 busybox #创建两个容器C1,C2,都默认使用bridge Docker network inspect bridge #查看bridge网络的容器有C1和C2
Docker network create --driver=bridge isolated_nw
Docker run --name=C3 --network==isolated_nw busybox
Docker netrwork connect isolated C2
Docker inspect C1 #172.17.0.4 【bridge】 Docker inspect C2 #172.17.0.5和172.19.0.3【bridge和isolated_nw】 Docker inspect C3 #172.19.0.2 【isolated_nw】 #C1与C3无法通信,因为IP是属于不同IP段,短时C1、C3都可以与C2通信 #登录容器,ping容器的IP可以,ping 容器的名称是不可以的。 |
Swarm简介
Swarm就是docker集群形成一个docker engine,对外提供集群服务。提供swarm的API |
Swarm架构