制作镜像

  1. 拉取一个基础镜像centos

Docker pull centos

 

  1. 创建一个交互式容器

#创建的容器名不能重复

Docker run –it –-name mycentos /bin/bash

 

  1. 软件上传

#在宿主机执行命令

 Docker cp apache-tomcat.tar.gz mycentos:/root

  Docker cp jdk.tar.gz mycentos:/root

 

  1. 在容器中安装jdk

(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. 安装tomcat

#在容器中 执行

(1)tar –zxvf apache-tomcat.tar.gz –c /usr/local/

(2)vi /usr/local/apache-tomcat/bin/setcalsspath.sh中配置java目录

  1. 提交镜像,制作mytomcat镜像

#在宿主机中执行

Docker commit mycentos mytomcat

  1. 制作容器

#将宿主机的8080端口映射为8888端口,制作容器t1

Docker run –itd --name=t1 –p 8888:8080 mytomcat /bin/bash

docker hub 代替品_docker

  1. 启动tomcat

#在宿主机执行容器中tomcat中的启动脚本,也可以登录容器执行startup.sh

Docker exec t1 /usr/local/apache-tomcat/bin/startup.sh

  1. 登录 宿主机ip:8888界面就可以访问容器tocmat的web页面

docker hub 代替品_docker hub 代替品_02

 

容器/镜像打包

#镜像打包后可以传到其他服务器使用

  1. 镜像打包

#将tomcat镜像打包成tomcat.tar文件,放在宿主机的root目录下,就可以吧tomcat.tar到其他服务器使用

Docker save -o /root/tomcat.tar mytomcat

  1. 登录其他节点导入镜像

Docker load –i /root/tomcat.tar

#导入成功后,可以通过docker image 查看导入的镜像

 

  1. 容器打包

#将容器t1打包成t1.tar

Docker export –o /root/t1.tar t1

  1. 导入容器

Docker import t1.tar mytomcat:latest

 

用docker build制作镜像流程(DSL)

docker hub 代替品_docker hub 代替品_03

 

 

 

通过dockerfile构建镜像步骤

  1. 创建一个目录
  2. 在目录下创建dockerfile文件以及其他文件
  3. 通过docker build构建
  4. 通过构建的镜像启动容器
  5. 例子

 

 

docker hub 代替品_Docker_04

  1. 创建个文件夹

mkdir rw-test

  1. 进入创建的rw-test目录下,并创建Dockerfile,D一定要大写
  2. 在Dockerfile文件中输入一下内容

docker hub 代替品_docker hub 代替品_05

FROM docker.io/centos

#from指定一个基础镜像centos

MAINTAINER **

#MAINTAINER执行作者名字与邮箱

RUN yum install –y ***

#RUN代表安装的软件

ENTRYPOIN ***

# ENTRYPOIN执行的指令,代表启动nginx服务

 

  1. 在rw-test目录下构建镜像

#-t后面的rw-nginx镜像名称,rm代表删除中间生成的临时容器,最后的.是当前目录下

Docker build –t rw_nginx --rm=true .

docker hub 代替品_tomcat_06

#提示success就是构建成功

docker hub 代替品_tomcat_07

   #查看构建的镜像

    Docker images

 

docker hub 代替品_tomcat_08

 

  1. 测试是否成功

#创建容器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

docker hub 代替品_tomcat_09

 

镜像推送

  1. 镜像打标签

#hello-world是镜像,latest是版本(最新的),1008801509033是仓库,test-hello-world上传到仓库中文件名(避免与仓库中的hello-world名字冲突,所以修改了名字),v2是版本

Docker tag hello-world:latest 108801509033/test-hello-world:v2

docker hub 代替品_Docker_10

  1. 登录账号,输入账号密码

Docker login

docker hub 代替品_tomcat_11

  1. 推送镜像

#推送镜像之前必须登录仓库

Docker push 108001509033/test-hello-world

docker hub 代替品_Docker_12

  1. 登录docker hub查看上传的镜像,v2就是刚上传的test-hello-world:v2

docker hub 代替品_docker hub 代替品_13

 

阿里云创建镜像仓库

  1. 创建空间

 

docker hub 代替品_tomcat_14

docker hub 代替品_tomcat_15

创建之后,点击仓库名称,会有相关命令说明

  1. 输入登录命令

docker hub 代替品_docker_16

  1. 给镜像打标签,并推送镜像到仓库

docker hub 代替品_docker hub 代替品_17

 

搭建私有仓库

  1. 启动docker Registry,使用docker官方提供的registry镜像就可以搭建私有镜像仓库

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

 

  1. 推送镜像,本地私有镜像仓库搭建并启动完成,同时要推送的镜像也已经准备就绪后,就可以指定私有镜像仓库,具体操作指令如下:

Docker push localhost:5000/myhellodocker

 

  查看本地仓库镜像

http://localhost:5000/v2/myhellodocker/tags/list

 

配置私有仓库认证

  1. 查看docker registry 私有仓库搭建所在服务地址:ifconfig
  2. 生成自签名证书,在home目录下执行

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:生成的证书

 

  1. 生成用户名和密码

Cd .. && mkdir auth

Docker run –entrypoint htpasswd registry:2 –Bbn ruanwen 123456 > auth/htpasswd

 

  1. 创建新的仓库

docker hub 代替品_tomcat_18

  1. 配置docker registry访问接口

docker hub 代替品_tomcat_19

  1. docker registry私有仓库使用登记

docker hub 代替品_docker hub 代替品_20

  1. 重启并加载docker配置文件

Systemctl reload docker

Systemctl restart docker

 

  1. 验证:登录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 hub 代替品_docker_21

 

Docker自定义网络

Docker network create –driver bridge isolated_nw

#创建一个基于bridge网络驱动,名称为isolated_nw

docker hub 代替品_docker hub 代替品_22

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 hub 代替品_docker_23

 

  1. 创建一个自定义网络

Docker network create --driver=bridge isolated_nw

  1. 创建C3容器

Docker run --name=C3 --network==isolated_nw busybox

  1. 为C2添加一个网络

Docker netrwork connect isolated C2

 

  1. 查看每个容器的IP地址

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

docker hub 代替品_tomcat_24

 

Swarm架构

docker hub 代替品_docker hub 代替品_25