重启docker服务,容器全部退出的解决办法

  • 方法一:添加--restart=always
#在启动容器时加入参数,当docker重启后,会自动启动该容器
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry
  • 方法二:配置文件中添加"live-restore": true
#在配置文件中添加一下参数,重启后会启动容器
vi /etc/docker/daemon.json

{
  "live-restore": true
}

Docker构建私有registry

启动registry

#创建目录
mkdir -p /opt/registry

#启动registry容器
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/registry:/var/lib/registry registry

修改配置文件

在配置文件中添加insecure-registries信息,并重启docker

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["http://ccr.ccs.tencentyun.com/1997styhome/home"],
  "insecure-registries": ["10.0.0.100:5000"]
}

制作本地镜像并push

推送到本地仓库的镜像标签需要符合格式,首先需要修改镜像标签

#修改nginx镜像标签
docker tag nginx 10.0.0.100:5000/1997sty/nginx:v1

#推送镜像到本地仓库
docker push 10.0.0.100:5000/1997sty/nginx:v1

异地进行pull镜像

其他主机拉取镜像时,需要在配置文件中添加insecure-registries信息,并重启docker

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["http://ccr.ccs.tencentyun.com/1997styhome/home"],
  "insecure-registries": ["10.0.0.100:5000"]
}

如果没有配置会产生以下报错

[root@docker2 ~]# docker pull 10.0.0.100:5000/1997sty/nginx:v1
Error response from daemon: Get https://10.0.0.100:5000/v1/_ping: http: server gave HTTP response to HTTPS client

拉取镜像

docker pull 10.0.0.100:5000/1997sty/nginx:v1

本地仓库加安全认证

可以通过http加密的方式添加登录验证

#安装httpd-tools
yum install httpd-tools -y

#创建目录
mkdir /opt/registry-auth/ -p

#生成密码
htpasswd -Bbn 1997sty 123 > /opt/registry-auth/htpasswd

重新生成带有秘钥功能的registry容器

#删除所有容器
docker conrm -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

push镜像之前,需要进行login

docker login 10.0.0.100:5000
Username: 1997sty
Password: 
Login Succeeded

push镜像之前,需要进行login

docker login 10.0.0.100:5000
Username: 1997sty
Password: 
Login Succeeded

docker pull 10.0.0.100:5000/1997sty/centos:v1

harbor实现图形化register

安装

安装docker和docker-compose

#安装docker的步骤参考之前的笔记
yum install -y docker-compose

上传harbor-offline-installer-v1.5.1.tgz到/opt,并解压

  • 资源百度查找下载
cd /opt
tar zxvf harbor-offline-installer-v1.5.1.tgz
cd harbor

修改harbor.cfg配置文件

hostname = 10.0.0.100
harbor_admin_password = 123456

执行install.sh

sh install.sh

修改各个节点的docker配置文件,并重启

  • 主要是添加参数,重启docker后可以保证容器可以自启动
vi /etc/docker/daemon.json

{
  "registry-mirrors": ["http://ccr.ccs.tencentyun.com/1997styhome/home"],
  "insecure-registries": ["10.0.0.100:5000"],
  "live-restore": true
}

在harbor中操作

  • 在网页中可以创建项目可用户,图形化界面,默认管理员用户为admin

QQ截图20200516152849.jpg

制作镜像并上传habor

首先需要修改配置文件,将该仓库写入配置文件

vi /etc/docker/daemon.json

{
  "registry-mirrors": ["http://ccr.ccs.tencentyun.com/1997styhome/home"],
  "insecure-registries": ["10.0.0.100:5000","10.0.0.100"],
  "live-restore": true
}

实现推送镜像

  • 需要在网页上创建好对应的项目,然后向该项目推送镜像
#修改镜像标签
docker tag centos:6.9 10.0.0.100/1997sty/centos:v1

#登录
docker login 10.0.0.100
Username: admin
Password: 
Login Succeeded

#推送镜像
docker push 10.0.0.100/1997sty/centos:v1

Docker本地网络类型

#查看支持网络类型
[root@docker1 /]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
24580c122321        bridge              bridge              local
5261e1609681        host                host                local
d562731f776c        none                null                local

使用docker run启动容器时,添加--network=xxxxx参数来指定网络类型

  • none : 无网络模式,无法连接外网也没有局域网
  • bridge : 默认模式,相当于NAT,具体功能可以参考vmware虚拟机的NAT网络

QQ截图20200516154950.jpg

  • host : 共用宿主机Network NameSapce,主机名和网络设置与宿主机相同
  • container : 与其他容器共用Network Namespace,主要可以实现容器高可用(当一个容器发生故障,可以快速启动一个容器接替故障容器继续工作)

Docker跨主机访问-macvlan实现

在两台宿主机上分别创建一个网络

docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway=100.0.0.254 -o parent=eth0 macvlan_1

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

创建容器,指定网络模式和ip,创建的网络没有外网

  • docker1
docker run -it --network macvlan_1 --ip=100.0.0.11 centos:6.9 /bin/bash

QQ截图20200516161444.jpg

  • docker2
docker run -it --network macvlan_1 --ip=100.0.0.12 centos:6.9 /bin/bash

QQ截图20200516161423.jpg

Docker 跨主机访问-overlay实现

启动consul服务,实现网络的统一配置管理

#docker1
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

修改配置文件添加以下内容,并重启

  • docker1
vi /etc/docker/daemon.json

{
  "registry-mirrors": ["http://ccr.ccs.tencentyun.com/1997styhome/home"],
  "insecure-registries": ["10.0.0.100:5000","10.0.0.100"],
  "live-restore": true,
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.100:8500",
  "cluster-advertise": "10.0.0.100:2376"
}
  • docker2
vi /etc/docker/daemon.json

{
  "registry-mirrors": ["http://ccr.ccs.tencentyun.com/1997styhome/home"],
  "insecure-registries": ["10.0.0.100:5000","10.0.0.100"],
  "live-restore": true,
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.100:8500",
  "cluster-advertise": "10.0.0.101:2376"
}

创建overlay网络

docker network create -d overlay --subnet 172.116.0.0/24 --gateway 172.11.0.254 overlay

#创建完成后可以通过命令在两台宿主机上查看
#docker network ls

两台宿主机启动容器测试

#docker1,docker2
#每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
docker run -it --network overlay busybox /bin/sh
  • docker1查看ip

QQ截图20200516164925.jpg

  • docker1内网和外网测试

QQ截图20200516165235.jpg

  • docker2查看ip

QQ截图20200516164916.jpg

  • docker2内网和外网测试

QQ截图20200516165358.jpg