1 Docker Compose工具
Docker Compose 的前身是 Fig,它是一个定义及运行多个 Docker 容器的工具。使用 Docker Compose 时,只需要在一个配置文件中定义多个 Docker 容器,然后使用一条命令启 动这些容器。Docker Compose 会通过解析容器间的依赖关系按先后顺序启动所定义的容器。
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 时需要注意下面事项:
(1)不支持制表符 tab 键缩进,需要使用空格缩进。
(2)通常开头缩进两个空格。k
(3)字符后缩进一个空格,如冒号、逗号、横杆。
(4)用#号注释。
(5)如果包含特殊字符,要使用单引号('')引起来。
(6)布尔值(true、 false、 yes、 no、 on、 off)必须用引号("")括起来,这样分析器会将它们解释为字符串。
运行
前台运行
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
重启
重启指定容器
|
全部重启
|
删除
|
示例
[root@bogon ~]# mkdir demo
[root@bogon ~]# cd demo/
[root@bogon demo]# mkdir nginx
[root@bogon demo]# wget -P nginx/ http://nginx.org/download/nginx-1.15.2.tar.gz
[root@bogon demo]# cat nginx/Dockerfile
FROM centos:7.6.1810
RUN yum -y install gcc make pcre-devel zlib-devel tar zlib
ADD nginx-1.15.2.tar.gz /usr/src/
RUN cd /usr/src/nginx-1.15.2 \
&& mkdir /usr/local/nginx \
&& ./configure --prefix=/usr/local/nginx && make && make install \
&& ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
RUN rm -rf /usr/src/nginx-1.15.2
EXPOSE 80
EXPOSE 443
CMD ["nginx","-g","daemon off;"]
[root@bogon demo]# mkdir mysql
[root@bogon demo]# cat mysql/Dockerfile
# 指定基础镜像
FROM hub.c.163.com/library/mysql:5.7
# 修改编码方式
RUN echo "character-set-server=utf8" >> /etc/mysql/mysql.conf.d/mysqld.cnf
RUN service mysql restart
EXPOSE 3306
[root@bogon demo]# echo 'MYSQL_ROOT_PASSWORD=root' > mysql/mysql.env
[root@bogon demo]# cat docker-compose.yaml
# 指定本 yml 依从的 compose 哪个版本制定的
version: "3"
# 定义服务,此处定义了两个服务一个nginx一个redis
services:
nginx:
# 指定为构建镜像上下文路径
## 我这里在docker-compose.yml文件的上一级目录有一个nginx目录,nginx目录下有准备好的dockerfile所以这里直接指定../nginx
build: ./nginx
# 启动的时候先启动redis和mysql
depends_on:
- redis
- mysql
# 指定端口号
ports:
- "80:80"
redis:
# 该 redis 服务使用 Docker Hub 的公共 Redis 映像
image: "redis:alpine"
ports:
- "6379:6379"
mysql:
# 指定为构建镜像上下文路径
build:
# 指定目录
context: ./mysql
# 指定dockerfile文件名,一般适用于dockerfile的文件名不叫Dockerfile
dockerfile: Dockerfile
# 从文件添加环境变量
env_file:
- ./mysql/mysql.env
ports:
- "3306:3306"
# 通过docker-compose运行
[root@bogon demo]# docker-compose up –d
# 查看容器运行情况
[root@bogon demo]# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
demo_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::330
6->3306/tcp
demo_nginx_1 nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp,:
::80->80/tcp
demo_redis_1 docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp,:::637
9->6379/tcp
2 Harbor私有仓库
什么是Harbor
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。它以 Docker 公司开源的 Registry 为基础,提供了管理 UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器, Harbor提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。
Harbor的优势
Harbor 具有如下优势:
基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不 同
的权限。
基于镜像的复制策略: 镜像可以在多个
载平衡、高可用性、多数据中心、混合和多云场景。
支持Harbor 与现有的企业 LDAP/AD 集成,用于用户认证和管理。
删除图像和收集垃圾:镜像可以被删除,也可以回收镜像占用的空间。
图形用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
审计:对存储库的所有操作都进行记录。
RESTful API:用于大多数管理操作的
Harbor的构成
Harbor 在架构上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)五个组件:
部署Harbor私有仓库
资源列表
操作系统 | 主机名 | 配置 | IP |
CentOS7.3.1611 | harbor | 2C4G | 192.168.207.131 |
CentOS7.3.1611 | client | 2C4G | 192.168.207.165 |
基础环境
两个节点均要操作
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
setenforce 0
sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
准备docker-compose工具
curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io
# 启动服务
systemctl start docker
systemctl enable docker
部署安装
Harbor节点操作
# 解压软件包
tar zxvf harbor-offline-installer-v2.2.1.tgz -C /usr/local/
修改配置文件
# 准备配置文件
cp /usr/local/harbor/harbor.yml.tmpl /usr/local/harbor/harbor.yml
vi /usr/local/harbor/harbor.yml
# 修改hostname,修改为自己的IP
hostname: 192.168.207.131
# 将https段的全部注释,这里不使用https访问
启动Harbor
# 进行预检查
/usr/local/harbor/prepare
# 安装
/usr/local/harbor/install.sh
## 查看容器状态
cd /usr/local/harbor;docker-compose ps
[root@harbor harbor]# cd /usr/local/harbor;docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh Up (healthy)
harbor-db /docker-entrypoint.sh Up (healthy)
harbor-jobservice /harbor/entrypoint.sh Up (healthy)
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy)
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:80->8080/tcp,:::80->8080/tcp
redis redis-server /etc/redis.conf Up (healthy)
registry /home/harbor/entrypoint.sh Up (healthy)
registryctl /home/harbor/start.sh Up (healthy)
访问Harbor
浏览器访问Harbor节点的ip
默认账号:admin
默认密码:Harbor12345
创建项目
客户端配置使用Harbor
Client节点操作
配置daemon.json文件
# "registry-mirrors": ["https://r9xxm8z8.mirror.aliyuncs.com"]这个是修改为国内的镜像源,使用国内的源访问速度会快一点
# insecure-registries是指定私有仓库
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://r9xxm8z8.mirror.aliyuncs.com"],
"insecure-registries":["192.168.207.131"]
}
EOF
重启Docker服务
systemctl daemon-reload
systemctl restart docker
测试上传下载镜像
Client节点操作
登录镜像仓库
# 连接仓库
# -u指定用户名
# -p 指定密码
# 最后要跟上Harbor仓库的地址
[root@client ~]# docker login -uadmin -pHarbor12345 http://192.168.207.131
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
下载镜像
root@client ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
5cc84ad355aa: Pull complete
Digest: sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest
上传镜像
# 上传镜像首先修改镜像名称
[root@client ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest beae173ccac6 23 months ago 1.24MB
# 修改为Harbor仓库的ip/项目的名称/镜像名称:tag
[root@client ~]# docker tag busybox 192.168.207.131/demo/busybox:v1
# 上传镜像
[root@client ~]# docker push 192.168.207.131/demo/busybox:v1
The push refers to repository [192.168.207.131/demo/busybox]
01fd6df81c8e: Pushed
v1: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527
验证
验证方式有两种可以通过web页面访问查看有没有上传的镜像,还可以通过命令行下载刚才上传的镜像,两者二选一即可。