HOME
BLOG
TIME
FRIENDS
SAY TO ME
MOOD
TRAVELING
Docker的前世今生
2020/09/30 4.7k 23 分钟 点击

1. Docker介绍

1.1什么是容器?

简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。

1.2容器的前世

FreeBASE jail ——> Linux vserver
chroot —–> 完整的根文件系统(FHS)标准的
namespaces — > UTS Mount IPC PID user network
cgroup —> 资源的分配和监控;
通过比较复杂的代码开发的过程,调用以上三项技术
实现容器的创建—->管理—->销毁

1.3传统虚拟化技术和容器对比

首先,Container技术和服务器虚拟化并不是一样的技术:

两者虽然都属于虚拟化的技术,目标都是为了将一套应用程序所需的执行环境打包起来,建立一个孤立环境,方便在不同的硬件中移动,但两者的运作思维截然不同。

简单来说,传统虚拟化技术如vSphere或Hyper-V是以操作系统为中心,而Container技术则是一种以应用程序为中心的虚拟化技术。

传统虚拟化技术从操作系统层下手,目标是建立一个可以用来执行整套操作系统的沙盒独立执行环境,习惯以虚拟机(Virtual Machine)来称呼。Container技术则是直接将一个应用程序所需的相关程序代码、函式库、环境配置文件都打包起来建立沙盒执行环境,Container技术产生的环境就称为Container。

两者具体区别

  • ​​​​​​​虚拟机需要安装操作系统(安装Guest OS)才能执行应用程序,而Container内不需要安装操作系统就能执行应用程序
    Container技术不是在OS外来建立虚拟环境,而是在OS内的核心系统层来打造虚拟执行环境,透过共享Host OS的作法,取代一个一个Guest OS的功用。Container也因此被称为是OS层的虚拟化技术。

  • Container是轻量级虚拟化技术

     ​​​​​​​Container技术采取共享Host OS的作法,而不需在每一个Container内执行Guest OS,因此建立Container不需要等待操作系统开机时间,不用1分钟或几秒钟就可以启用,远比需要数分钟甚至数十分钟才能开启的传统虚拟机来的快。
  • Container技术的发展

     早在1982年,Unix系统内建的chroot机制也是一种Container技术。其他如1998年的FreeBSD jails、2005年出现的Solaris Zones和OpenVZ,或像是Windows系统2004年就有的Sandboxie机制都属于在操作系统内建立孤立虚拟执行环境的作法,都可称为是Container的技术。直到2013年,dotCloud这家PaaS服务公司开源释出了一套将Container标准化的平台Docker,大受欢迎,所以,dotCloud决定以Docker为名成立新公司力推。

    1.4容器的今生?

    实现隔离能力!
    LXC (LinuXContainer)
    对于原有的常用功能进行了封装,方便我们做容器的生命周期

—–> Docker ( dotc1oud)

2. Docker的安装

2.1 Docker的安装

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager –add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum -y install docker-ce

2.2 Docker服务阿里云镜像加速

vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://wixr7yss.mirror.aliyuncs.com"]
}

systemctl daemon-reload
systemctl restart docker

2.3 启动Docker服务

systemctl daemon- reload
systemctl restart docker
docker version
docker info

3.Docker的镜像基础管理

3.1获取镜像

基础镜像拉取
docker search centos
docker pull centos:6.9
docker pull centos:7.5 .1804
docker pull nginx

3.2镜像基本查看

[rootadocker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 6.8 82f3b5f3c58f 4 months ago 195 MB
oldguo/centos_ sshd v1 .0
oldguo/centos sshd v2 .0
o1dguo/centos sshd v3 .0
标识镜像唯一性的方法:

  1. REPOSITORY :TAG
    centos7.5 :1804
  2. IMAGEID(sha256:64位的号码,默认只截取12位)
    82f3b5f3c58

    3.3镜像详细信息查看

    [root@docker /]# docker image inspect ubuntu:latest
    [root@docker /]# docker image inspect 82f3b5f3c58f

    3.4只查看镜像ID

    [root@docker ~] # docker image ls -q

    3.5镜像的导入和导出

    [root@docker ~]# docker image save 3556258649b2 > /tmp/ubu.tar
    [root@docker ~]# docker image rm 3556258649b2
    [root@docker ~] # docker image load - i / tmp/ubu.tar
    [root@docker ~] # docker image tag 3556258649b2 oldguo/ubu :v1

    3.6镜像的删除

    [root@docker ~] # docker image rm -f 3556258649b2
    [root@docker ~]# docker image rm -f docker image ls -q

5.容器的管理

5.1运行第一个容器

交互式的容器:
[root@docker ~]# docker container run -it 9f38484d220f
[root@docker /]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ecdb2cff1cd9 7e6257c9f8d8 “/bin/bash” 56 minutes ago Up 56 minutes centos

CONTAINERID:容器的唯一号码(自动生成的)
NAMES : 容器的名字(可以自动,也可以手工指定)
[root@docker /]# docker container run -it –name=” cent7” 9f38484d220f
[root@docker /]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2f8e05e764de 295c7be07902 “nginx -g ‘daemon of…” 56 minutes ago Exited (0) 56 minutes ago nginx
ecdb2cff1cd9 7e6257c9f8d8 “/bin/bash” 57 minutes ago Up 57 minutes centos
b3f39b603415 688353a31fde “/bin/bash” 2 hours ago Exited (0) About an hour ago centos-ansible
1c45f487e201 3a5f278e66df “/usr/bin/supervisor…” 3 hours ago Exited (0) 2 hours ago centos7
b6c37edfe400 0d120b6ccaa8 “/bin/bash” 3 hours ago Exited (0) About an hour ago upbeat_wright
a633dd0a7877 0d120b6ccaa8 “/bin/bash” 3 hours ago Exited (0) 3 hours ago determined_ganguly

容器的运行状态( Exited ,Up)

5.容器的管理

5.1运行第一个容器

5.1.1交互式的容器:

[root@docker ~]# docker container run -it 9f38484d220f
[root@ docker /]# docker container ls
CONTAINER ID TMAGE COMMAND CREATED STATUS PORTS
4d1ef5a6ecfc 9f38484d220f “/bin/bash” 5 minutes ago Up 5 minutes nervous_ alle

CONTAINERID:容器的唯一号码(自动生成的)
NAMES:容器的名字(可以自动,也可以手工指定)
例子:手工指定容器名启动
[root@docker /]# docker container run -it –name= =”cent7” 9f38484d220f
[root@docker /]# docker container ls -a

5.1.2守护式容器

[root@docker /]# docker run -d –name= “nginx” nginx:1.14
查询容器的详细信息:
[root@ docker /]# docker container inspect nginx

5.1.3容器的应用场景

交互式的容器:工具类:开发,测试,临时性的任务()
[root@ docker ~]# docker container run -it –name=cent76 –rm 9f38484d220f
守护式容器:网络服务
[root@docker /]# docker run -d -p 8080:80 –name= =”nginx_80” nginx :1.14
###5.1.4容器的启动\关闭\连接
守护式容器的关闭和启动
[root@ docker /]# docker container stop nginx_80
[root@ docker /]# docker container start nginx_80
交互式的容器的关闭和启动
[root@ docker /]# docker container stop nervous_ al1en
[root@ docker /]# docker container start -i nervous_ allen
容器的连接方法:
[root@ docker /]# docker container attach centos
子进程的方式登录(在己有工作容器中生成子进程,做登录,可以进行容器的调试,退出时也不会影响到当前容器)
[root@ docker ~]# docker container exec -it nervous_allen /bin/bash

容器的后台及前台运行:
1.ctr1+P,Q
attach调用到前台
2.死循环
3.让程序前台一直允许(夯在前台)

5.2docker容器的网络访问

指定映射(docker会自动添加一条iptables规则来实现端口映射)
-p hostport:containerPort
-p ip:hostPort:containerPort
-P ip: :containerPort(随机端口:32768-60999)
-p hostPort:containerPort/udp
-p 81:80 -p 443 :443
dockerrun-P80(随机端口)
[root@ docker ~]# docker container run -d -p 8080:80 –name = ‘n2 ‘ nginx:1.14
[root@ docker ~]# docker container run -d -p 10 .0.0.100 :8081:80 –name= ‘n3 ‘ nginx:1.14
[root@ docker ~]# docker container run -d -P 80 - -name= ‘n5 ‘ nginx:1 .14
[root@ docker ~]# docker container run -d -p 172.16.1.200: :80 - -name= ‘n6 ‘ nginx:1.14

5.3容器的其他管理

docker ps- -a -q
等价于:
docker container ls -a -q
[root@ docker ~]# docker top ba9143bcaf74
等价于:
[root@ docker ~]# docker container top ba9143bcaf74
查看日志:
[root@ oldboy docker]# docker logs testxx
[root@ oldboy docker]# docker logs -tf testxx
[root@ oldboy docker]# docker logs -t testxx
[root@ oldboy docker]# docker logs -tf –tail 10 testxx
[root@ oldboy docker]# docker logs -tf –tail 0 testxx

小结:
1.镜像类:
docker image
search
pull
ls ★★★★★
inspect ★★★★★
rm ★★★★
save
load
2.容器类
docker container
run ★★★★★
start ★★★★
stop ★★★★
restart
kil
attach
exec ★★★★★
ls ★★★★★
top ★★★★
logs
inspect ★★★★

5.4docker的数据卷实现持久化存储

5.4docker的数据卷实现持久化存储

1.手工交互数据:
[root@docker opt]# docker container cp index.html n1:/usr/share/nginx/htm1/
[root@docker opt]# docker container cp n1:/usr/share/nginx/htm1/50x.html ./
2.volume实现宿主机和容器的数据共享
[root@ docker opt]# mkdir -p /opt/html
[root@ docker ~]# docker run -d –name= “nginx_3” -p 83:80 -v /opt/html:/usr/share/nginx/html nginx
作用:数据持久化
3.例子:开启两个nginx容器(90,91),共同挂载-一个数据卷,实现静态资源共享
4.数据卷容器:
(1)宿主机模拟数据目录
mkdir -p /opt/volume/a
mkdir -p /opt/volume/b
touch /opt/volume/a/a.txt
touch /opt/volume/b/b.txt
(2)启动数据卷容器
docker run -it –name “httpd_volumes” -v /opt/Volume/a:/opt/a -v /opt/volume/b:/opt/b centos:6.9 /bin/bash
ctrl p q
(3)使用数据卷容器
docker run -d -p 8085:80 –volumes-from httpd_volumes –name “n8085” nginx
docker run -d -p 8086:80 –volumes-from httpd_volumes –name “n8086” nginx
作用:在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷时,可以采用数卷容器进行统一管理

6.镜像制作

6.1基于容器的镜像制作

6.1.1 启动基础镜像容器 (ECS实现)

docker run -it –name=”oldguo_ centos” centos :6.9

6.1.2 安装所需要的软件包,并且启动测试

mv /etc/yum.repos.d/* .repo /tmp
echo -e “[ftp] \nname= =ftp\nbaseur1=ftp://172.17.0.1/ centos6.9\ngpgcheck=0”>/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server -y
/etc/init.d/sshd start —–>重要:ssh第一次启动时,需要生成秘钥,生成pam验证配置文件
/etc/init.d/sshd stop
echo “123456” | passwd root –stdin

6.1.3 镜像的制作

docker
commit oldguo_ centos oldguo/centos6.9_sshd:v1

6.1.4基于新镜像启动容器实现,centos6 .9+sshd的功能

[root@docker ~]# docker container run -d –name=“sshd_2222” -p 2222:22 7c0d7daff04a /usr/sbin/sshd -D

##7.2构建企业网站定制镜像 (Centos6.9_SSHD_LAMP_ BBS )

6.2.1 启动基础镜像容器

[root@ docker ~]# docker container rm -f `docker ps -a -q`
[root@ docker ~]# rm -rf /opt/*
[root@ docker ~]# mkdir -p /opt/vol/mysql /opt/vol/html
[root@ docker ~]# docker run -it –name= “oldguo_ centos_ bbs” -v /opt/vol/mysql :/var/lib/mysql -v /opt/vol/html:/var/www/html centos:6.9

6.2.2优化yum源并安装软件

mv /etc/yum.repos.d/*.repo /tmp
cho -e “[ftp] \nname=ftp\nbaseurl=ftp://172.17.0.1/centos6.9\ngpgcheck=0”> /etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server httpd mysql-server mysql php php-mysql -y

6.2.3软件初始化

/etc/init.d/sshd start
/etc/init.d/sshd stop
echo “123456” | passwd root –stdin

mysqld 初始化

[root@ c3fd597ec194 mysql]# /etc/init.d/mysqld start
mysql> grant a11 on . to root@ ‘8’ identified by ‘123’;
mysql> grant all on . to discuz@ ‘8’ identified by ‘123’ ;
mysql> create database discuz charset utf8;

apache初始化

[root! c3fd597ec194 mysql]# /etc/init.d/httpd start

6.2.4 制作LAMP第一版基础镜像

[root@ docker mysql]# docker commit c3fd597ec194 oldguo/centos_ lamp:v1

6.2.5 根据第一版镜像,启动新容器

[root@docker ~]# docker run -it –name=”oldguo_centos_ bbs_v3” -v /opt/vol/mysql:/var/lib/mysql -v /opt/vol/html :/vax/www/html
-p 8080:80 1cd314cba420
[root@ f22496ebafaf /]# /etc/init.d/mysqld start
[root@ f22496ebafaf /]# /etc/init.d/httpd start

6.2.6 测试php功能

vim /var/www/html/index.php

6.2.7 安装bbs论坛

上传bbs代码到宿主机/opt/vol/html并解压
安装

6.2.8制作LAMP+bbs第二版镜像

[root@ docker ~]# docker commit oldguo_centos_ bbs_v3 oldguo/centos6.9 sshd_lamp_bbs:v1

6.2.9 创建启动脚本

[root@ docker html]# cd /opt/vol/html
[root@ docker html]# cat init.sh

# !/bin/bash
/etc/init.d/mysqld start    
/etc/init.d/httpd start
/usr/sbin/sshd -D

[root@docker html]# chmod 777 init.sh

6.2.10 启动容器,映射端口,挂载数据卷,自动启动服务

[root@ docker html]# docker container run -d –name=”oldguoyun_lamp_bbs” -v /opt/vol/mysql:/var/lib/mysq1 -v /opt/vol/html:/var/www/html -p 22222:22 -p 8888:80 -p 33060:3306 ac8888ea3e21 /var/www/html/ init. sh

6.3 centos:7.5.1804_sshd

6.3.1 启容器

mv /etc/yum.repos.d/*.repo /tmp
echo -e “[ftp]\nname=ftp\nbaseurl=ftp://172 .17.0 .1/centos7.5\ngpgcheck=0”>/etc/yum.repos.d/ftp.repo
yum makecache fast && yum install openssh-server -y
mkdir /var/run/sshd
echo ‘UseDNS no’ >> /etc/ssh/sshd_config
sed -i -e ‘ /pam_loginuid.so/d’ /etc/pam.d/sshd
echo ‘ root:123456’ I chpasswd
/usr/bin/ssh-keygen -A
docker commit oldguo_c75sshd d2bcdbdfd0f8
[root@ docker ~]# docker container run -d –name=sshd_ 2222 -p 222:22 oldguo_c75sshd /usr/sbin/sshd -D

7.通过Dockerfile定制企业镜像

7.1 Dockerfile的基本使用初体验(centos6.9_sshd)

[root@ docker ~]# mkdir -p /opt/ dockerfile/centos6.9_sshd
[root@ docker centos6.9_ sshd]# vim Dockerfile

# Centos6 .9 -SSHDv1.0
FROM centos@2199b8eb8390
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e " [ftp]\nname=ftp\nbaseur1=ftp://172 .17.0.1/centos6. 9\ngpgcheck=0" > /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y

RUN /etc/init.d/sshd start && /etc/init.d/sshd stop && echo "123456" I passwd root --stdin
CMD ["/usr/sbin/sshd", "-D"]
  • FROM: 基础镜像
    Syntax :

      centos:6.9
      centos@2199b8eb8390

    RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e “ [ftp]\nname=ftp\nbaseur1=ftp://172 .17.0.1/centos6. 9\ngpgcheck=0” > /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y

  • RUN: 构建镜像过程中运行的命令
    Syntax:

      mv /etc/yum.repos.d/*.repo /tmp && echo -e " [ftp]\nname=ftp\nbaseur1=ftp://172 .17.0.1/centos6. 9\ngpgcheck=0" > /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server -y
    
      ["mysqld", "--initialize-insecure", "--user=mysql", "--basedir=/usr/local/mysql", "--datadir=/ data/mysql/data"] 
  • EXPOSE: 向外暴露端口
    Syntax :

      EXPOSE 22    暴露端口
      EXPOSE 80
  • CMD 使用镜像启动容器时

# CentOS6.9_sshd_LAMP

FROM centos:6.9
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/CentOS6.9\ngpgcheck=0" > /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server httpd mysql-server mysql php php-mysql -y

RUN /etc/init.d/sshd start && /etc/init.d/mysqld start && /etc/init.d/httpd start && echo "1" | passwd root --stdin

RUN mysql -e "grant all on \*.\* to root@'%' identified by '1';grant all on \*.\* to discuz@ '%' identified by '1';create database discuz charset utf8;"

COPY init.sh /

ADD bbs.tar.gz /var/www/html

EXPOSE 22
EXPOSE 80
EXPOSE 3306

CMD["/bin/bash","/init.sh"]

init.sh脚本
[root@docker lamp]# cat init.sh

#!/bin/bash

/etc/init.d/mysqld start
/etc/init.d/httpd start
/usr/sbin/sshd -D

7.3通过例子学习其他指令

dockerfile 构建Lamp基础环境镜像

[root@ docker dockerfile]# mkdir -p /opt/dockerfile/lamp
[root@ docker dockerfile]# cd / opt/ dockerfile/lamp/
[root@ docker lamp]# vim Dockerfile

# CentOS6.9_sshd_LAMP

FROM centos:6.9
RUN mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/CentOS6.9\ngpgcheck=0" > /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server httpd mysql-server mysql php php-mysql -y

RUN /etc/init.d/sshd start && /etc/init.d/mysqld start && /etc/init.d/httpd start && echo "1" | passwd root --stdin

COPY init.sh /

ADD bbs.tar.gz /var/www/html

EXPOSE 22
EXPOSE 80
EXPOSE 3306

CMD ["/bin/bash","/init.sh"]


 mv /etc/yum.repos.d/*.repo /tmp && echo -e "[ftp]\nname=ftp\nbaseurl=ftp://172.17.0.1/CentOS6.9\ngpgcheck=0" > /etc/yum.repos.d/ftp.repo && yum makecache fast && yum install openssh-server httpd mysql-server mysql php php-mysql -y
  • Syntax:

       <src…>        <dest>

    COPY index.php /var/www/html/
    ADD bbs.tar.gz /var/www/html/
    ADD https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/centos-bookmarks-7-1.e17.noarch.rpm /tmp

  • 说明:
    COPY命令:
    Syntax :

      <src>...        <dest>

    从dockerfile所在目录,拷贝目标文件到容器的制定目录下。
    可以支持统配符,如果拷贝的是目录,只拷贝目录下的子文件子目录。
    cp yang/*
    ADD命令
    Syntax:

      <src>...        <dest>
      url            <dest>

    比COPY命令多的功能是,可以自动解压.tar*的软件包到目标目录下可以指定源文件为URL地址

VOLUME [“/var /www/html”, “/data/mysql/data”] 自动挂载数据卷

WORKDIR 切换到指定目录 不过以后执行的操作都在这个目录 可以使用RUN cd 来代替
ENV 在构建Dockerfile的时候来自定义环境变量
ENTRYPOINT 防止介入新的命令(手工输入命令替换掉CMD命令),使容器down掉 和CMD作用类似

8. Docker构建私有registry

8.1 启动registry .

docker run -d -p 5000:5000 –restart=always –name=registry -v /opt/registry:/vax/lib/registry registry

8.2 修改配置文件

vim /etc/docker/daemon.json

"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"] ,
"insecure-registries": ["172.16.69.145:5000"]

[root@ docker docker]# systemctl restart docker
##9.3制作本地镜像并push到镜像仓库
[root@ docker ~]# docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
[root@ docker ~]# docker images
[root@docker ~]# docker push 10.0.0.100:5000/oldguo/nginx:v1

8.4异地进行pu11镜像

[root@ docker ~]# docker pull 10.0.0.100 :5000/oldguo/nginx:v1

8.5本地仓库加安全认证

生成密码:
yum install httpd-tools -y

8.6重新启动带有秘钥功能的registry容器

docker rm -f docker ps -aq
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry –name register-auth -e “REGISTRY_AUTH=htpasswd” -e “REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm” -e “REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd” registry

8.7push镜像,需要进行login

[root@oldboy ~]# docker login 10.0.0.100:5000
Username: yang
Password: 123

habor实现图形化register

第一步:安装docker和docker-compose
yum install -y docker-compose
第二步:下载harbor-offline-installer-vxxx.tgz
第三步:上传到/opt,并解压
第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11
harbor_admin_password = 123456
第五步:执行install.sh

2.使用方法:
修改各个节点的docker配置文件
{
“registry-mirrors “: [“https:/uoggbpok.mirror.aliyuncs.com”] ,
“insecure-registries”: [“172.16.69.145:5000”, “172.16.69.145”] ,
“live-restore”: true
}
systemctl restart docker

3.在habor中添加项目
4.制作镜像并上传habor
[root@ docker harbor]# docker tag centos:6.9 172.16.69.145/oldguo/centos:v1
[root@ docker harbor]# docker login 172.16.69.145:5000
[root@ docker harbor]# docker push 172.16.69.145:5000/yang/centos:v1
5.在节点中pullhabor中的鏡像
docker pull 10.0.0.100:5000/oldguo/centos:v1

  1. Docker本地网络类型
  2. 1查看支持网络类型
    docker network ls
  3. 2 测试使用各类网络类型
    docker run network=xxx
    none : 无网络模式
    bridge : 默认模式,相当于NAT
    host : 公用宿主机Network NameSapce
    container:与其他容器公用Network Namespace
  4. Docker跨主机网络介绍
    macvlan
    overlay
  5. Docker跨主机访问-macvlan实现
    docker network create –driver macvlan –subnet=172.16.69.0/24 –gateway=172.16.69.254 -o parent=ens37 macvlan_1

docker run -it –network macvlan_1 –ip=172.16.69.2 centos:6.9 /bin/bash

ip link set eth0 promsic on (ubuntu或其他版本需要)

  1. Docker 跨主机访问-overlay实现
    docker run -d -p 8500:8500 -h consul –name consul progrium/consul -server -bootstrap

consul:kv类型的存储数据库(key:value)
docker01、02上:
vim /etc/docker/daemon.json
{
“hosts”:[“tcp://0.0.0.0:2376”,”unix:///var/run/docker.sock”],
“cluster-store”: “consul://172.16.69.145:8500”,
“cluster-advertise”: “172.16.69.145:2376”
}
docker01
vim /usr/lib/systemd/system/docker.service
把ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock改为下面
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock –cluster-store consul://172.16.69.145:8500 –cluster-advertise 172.16.69.145:2376
docker02
vim /usr/lib/systemd/system/docker.service
把ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock改为下面
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock –cluster-store consul://172.16.69.145:8500 –cluster-advertise 172.16.69.152:2376

-H来允许远程主机连接
–cluster-store指定consul的地址
–cluster-advertise告知consul自己的连接地址

systemctl daemon-reload
systemctl restart docker

2)创建overlay网络
docker network create -d overlay –subnet 172.16.0.0/24 –gateway 172.16.0.254 ol1

3)两边启动容器测试
docker run -it –network ol1 –name oldboy01 busybox /bin/bash
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
4 docker企业级镜像仓库harbor(vmware 中国团队)
第一步:安装docker和docker-compose
第二步:下载harbor-offline-installer-v1.x.x.tgz
第三步:上传到/opt,并解压
第四步:修改harbor.cfg配置文件
hostname = 10.0.0.101
harbor_admin_password = 123456
第五步:执行install.sh

Docker