目录
第一节:docker 重启策略与状态码
一:Docker 重启策略
二:Docker 容器的常见退出状态码
第二节:Docker Compose 工具的应用
一:Docker Compose 工具简介
1:什么是 Docker Compose
2:Docker Compose 的安装
3:文件格式以及编写注意事项
二:docker-compose 的基本用法
1:docker-compose 的运行
(1)前台运行
(2)后台运行
(3)重新构建运行
2:docker-compose 的关闭
(1)关闭指定容器
(2)全部关闭
3:docker-compose 的启动
(1)启动指定容器
(2)全部启动
4:docker-compose 的重启
(1)重启指定容器
(2)全部重启
5:删除
三:docker-compose 案例演示
1:编写文件
2:修改 nginx 配置文件
3:执行文件,生成容器
4:列出当前运行的容器
第三节:Harbor 私有仓库
一:Harbor 基础概念
1:什么是 Harbor
2:Harbor 的优势
3:Harbor 的构成
二:部署 Harbor 私有仓库
资源列表
1:基础环境设置(两个主机都要设置)
(1)关闭防火墙
(2)关闭 selinux
2:Harbor 部署安装
(1)下载安装包
(2)下载完成后,将压缩包上传到服务器:
(3)然后对其进行解压:
4:配置 harbor
6:运行 Harbor 的安装脚本
7:安装完成,使用浏览器访问 Harbor,正常情况下应能进入登录界面:
三:Harbor 客户端应用
1:所有的 docker 主机设置 daemon.json 文件
2:找一个 docker 主机,登录到我们的 Harbor 仓库
3:然后尝试使用命令行 push 一个镜像到 Harbor 上
4:测试 pull
5:退出 harbor
Docker 容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。Docker 容器的重启都是由 Docker 守护进程完成的,因此与守护进程息息相关。
Docker 容器的重启策略如下:
# 使 --restart 指定重启策略
[root@bogon ~]# docker run -itd --restart=always --name host1 busybox sh
8348bf8334cfe8fda90dc3f15e0df39f7c541416f1faa0721f728ed41fb29425
通过状态码我们可以大概判断出容器的情况。
状态码 | 说明 |
---|---|
0 | 正常退出 |
125 | Docker 守护进程本身错误 |
126 | 容器启动后,要执行的默认命令无法调用 |
127 | 容器启动后,要执行的默认命令不存在 |
其他 | 容器启动后正常执行的命令返回的状态码 |
Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用 Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启动这些容器。Docker Compose 会通过解析容器间的依赖关系按先后顺序启动所定义的容器。
[root@localhost ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@localhost ~]# chmod +x /usr/local/bin/docker-compose
[root@localhost ~]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[root@localhost ~]# docker-compose --version
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML 数据描述语言,语法比 XML 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号([])括起来,hash 用花括号({})括起来
使用 YAML 时需要注意下面事项:
docker-compose up
docker-compose up -d
docker-compose up --build -d
docker-compose stop <容器名称>
# 示例:
docker-compose stop nginx
docker-compose stop
docker-compose start <容器名称>
# 示例:
docker-compose start nginx
docker-compose start
docker-compose restart <容器名称>
# 示例:
docker-compose restart nginx
docker-compose restart
docker-compose down
[root@localhost ~]# vim docker-compose.yaml
#version: '2'
services:
webapp:
image: 'nginx'
ports:
- "80:80"
volumes:
- "/www/html:/www/html:rw"
- "/opt/nginx/nginx.conf:/etc/nginx/nginx.conf"
将 nginx 的配置文件上传到 docker 主机上
[root@localhost ~]# mkdir /opt/nginx
[root@localhost ~]# vim /opt/nginx/nginx.conf
#user nobody;
worker_processes 1;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /www/html;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root /www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
}
[root@localhost ~]# docker-compose up -d
[root@localhost ~]# docker-compose ps
[root@localhost ~]# docker-compose kill webapp
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。它以 Docker 公司开源的 Registry 为基础,提供了管理 UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP 集成、以及审计日志(Auditlogging)等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。
Harbor 具有如下优势:
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor - db)、Log collector(Harbor - log)五个组件:
(1)Proxy
Harbor 的 Registry、UI、Token 等服务通过一个前置的反向代理统一接收浏览器和 Docker 客户端的请求,并将请求转发给后端不同的服务。
Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。
操作系统 | 主机名 | 配置 | IP |
---|---|---|---|
CentOS7.9 2009 | harbor | 2C4G | 192.168.10.106 |
CentOS7.9 2009 | client | 2C4G | 192.168.10.101 |
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
首先下载官方的离线安装包
https://github.com/goharbor/harbor/releases/tag/v2.4.3
https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz
[root@localhost ~]# ls
harbor-offline-installer-v2.4.3.tgz
[root@localhost ~]# tar -zxvf harbor-offline-installer-v2.4.3.tgz
解压后的目录文件如下:
[root@localhost ~]# cd harbor
[root@localhost harbor]# ls
common.sh harbor.v2.4.3.tar.gz harbor.yml.tmpl install.sh LICENSE prepare
将配置文件模板拷贝一份,并命名为 harbor.yml,这是默认的配置文件名称:
[root@localhost harbor]# cp harbor.yml.tmpl harbor.yml
编辑 harbor.yml 文件,按照如下说明修改几处配置项:
[root@localhost harbor]# vim harbor.yml
hostname: 192.168.10.106
harbor_admin_password: Harbor12345
# https related config
#https:
# https port for harbor, default is 443
#port: 443
# The path of cert and key files for nginx
#certificate: /your/certificate/path
#private_key: /your/private/key/path
注意:
注释掉 https 相关的行
[root@localhost harbor]# ./install.sh
默认用户名为 admin,密码则为配置文件中定义的密码(默认为 Harbor12345 )。
在此处创建一个帐号 zhangsan,密码为 Aptech1!
创建一个项目,名称为 kubernetes
回到命令行上测试一下 push 和 pull。由于我们自己搭建的私有仓库默认是不受 Docker 信任的,所以需要先在配置文件中增加如下配置项让 Docker 信任该 registry:
[root@localhost ~]# vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.10.106"]
}
[root@ml ~]# systemctl daemon-reload
[root@ml ~]# systemctl restart docker
[root@localhost ~]# docker login 192.168.10.106
Username: zhangsan
Password:
Login Succeeded
[root@localhost ~]# docker pull cirros
[root@localhost ~]# docker tag cirros 192.168.10.106/kubernetes/cirros:v1
[root@localhost ~]# docker push 192.168.10.106/kubernetes/cirros:v1
到另一台机器上用同样方式配置 daemon.json 并 docker login 到 Harbor,然后使用 docker pull 从 Harbor 上拉取镜像:
[root@localhost ~]# docker pull 192.168.10.106/kubernetes/cirros:v1
1.13.12: Pulling from kubernetes/nginx
f2a67a3979c4: Pull complete
3c09c23e92d9: Pull complete
4a9999b86366: Pull complete
Digest: sha256:e4f647a4a75c510f40b37b6b7dc2516241ffa8bde5a442bde3d372c9519c84d99
Status: Downloaded newer image for 192.168.243.138/kubernetes/nginx:1.13.12
192.168.243.138/kubernetes/nginx:1.13.12
[root@localhost ~]# docker logout 192.168.10.106