8.29 docker-compose编排
由于要使用python环境运行docker-compose,所以需要验证python
python --version
1、pip工具
是python的包管理工具,与yum和redhat的关系是一样的
pip
[root@dd ~]# yum -y install python2-pip
升级版本,没有指定源无法升级
[root@dd ~]# pip install --upgrade pip
临时使用,指定版本号,升级pip
[root@dd ~]# pip install --upgrade pip==20.3 -i Simple Index
查看pip版本号,升级到20.3
[root@dd ~]# pip list
安装docker-compose,忽略requests
[root@dd ~]# pip install docker-compose --ignore-installed requests -i Simple Index
查看docker-compose 版本(1.18版本以上即可),安装docker
pip list
拖包
harbor-offline-installer-v2.11.1.tgz
查看docker版本
[root@dd ~]# docker --versionDocker version 26.1.4, build 5650f9b
解压软件包
[root@dd ~]# tar -zxvf harbor-offline-installer-v2.11.1.tgz harbor/harbor.v2.11.1.tar.gzharbor/prepareharbor/LICENSEharbor/install.shharbor/common.shharbor/harbor.yml.tmpl[root@dd ~]# lsanaconda-ks.cfg harbordocker.sh harbor-offline-installer-v2.11.1.tgz
复制一份配置文件 ,修改
[root@dd harbor]# cp harbor.yml.tmpl harbor.yml[root@dd harbor]# lscommon.sh harbor.yml install.sh prepareharbor.v2.11.1.tar.gz harbor.yml.tmpl LICENSE
harbor的配置文件是harbor.yml,但是解压后的目录中只有harbor.yml.tmpl,复制后改名
[root@dd harbor]# vim harbor.yml
....
域名修改 hostname: 192.168.1.21
......
http注释 13行左右
....
密码 47行
...
修改配置文件,启动docker服务
[root@dd harbor]# vim /etc/docker/daemon.json // 把端口号5000删掉,IP改成本机的[root@dd harbor]# vim /usr/lib/systemd/system/docker.service //13行删掉一部分[root@dd harbor]# systemctl daemon-reload [root@dd harbor]# systemctl start docker.service
检查环境,下载镜像
[root@dd harbor]# ./prepare
查询端口号没有被占用
[root@dd harbor]# netstat -lnput |grep 80[root@dd harbor]# netstat -lnput |grep 5000
执行install.sh文件
[root@dd harbor]# ./install.sh
拉取镜像
[root@dd harbor]# docker pull centos
查看docker健康状态
[root@dd harbor]# docker ps -a
打标签,登录
[root@dd harbor]# docker tag centos:latest 192.168.1.21/library/lala:v0[root@dd harbor]# docker login http://192.168.1.21Username: adminPassword: WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
上传镜像
[root@dd harbor]# docker push 192.168.1.21/library/lala:v0The push refers to repository [192.168.1.21/library/lala]74ddd0ec08fa: Pushed v0: digest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc size: 529
浏览器访问登录,查看项目
用户名:admin 密码:Harbor12345
正常推送即可
另一台机器,拉取镜像
[root@docker ~]# docker pull 192.168.1.21/library/lala:v0v0: Pulling from library/lalaDigest: sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dcStatus: Downloaded newer image for 192.168.1.21/library/lala:v0192.168.1.21/library/lala:v0[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEcentos nginx 1090369f02c7 47 hours ago 422MBcentos hppt0 f0a07f39abb1 2 days ago 338MB192.168.1.20:5000/centos hppt1 4e0fbeeb42a2 2 days ago 272MBcentos hppt1 4e0fbeeb42a2 2 days ago 272MBregistry latest cfb4d9904335 11 months ago 25.4MB192.168.1.21/library/lala v0 5d0da3dc9764 2 years ago 231MBcentos latest 5d0da3dc9764 2 years ago 231MB
docker-conpose容器编排
YAML注意事项
(1)不⽀持制表符 tab 键缩进,需要使⽤空格缩进。
(2)通常开头缩进 2 个空格。
(3)字符后缩进 1 个空格,如:冒号,逗号,横杠。
(3)⽤ # 表示注释。
(4)如果包含特殊字符⽤单引号引起来。
(5)布尔值(true、false、yes、no、on、off)必须使⽤“”引号括起来,这样分析器会将它们解释为字符串。
列表和数组
在yaml中,可以使用“-”符号表示一个列表和数组
fruits: # fruits是⼀个键,它对应⼀个列表,包含三个元素:apple、banana、orange
apple # fruits为⼀个⼤项,下⾯的⼩项只需要缩进⼏个空格,与其他项⽬对⻬即可
banana
orange
嵌套数据结构
yaml支持嵌套数据结构,可以使用缩进来表示不同层级之间的关系,可以使用#来表示注释信息
person: name: 'Meng Mr' # 两个空格,name和age是person的⼀级⼦节点 age: "34" address: # address是person的⼆级⼦节点 street: '123 Main St' # address节点包含了street、city、state和zip四个⼀级⼦节点 city: 'Anytown' state: 'CA' zip: '12345'
docker compose命令选项
(1)build:重新构建服务
(2)ps:列出容器
(3)up:启动所有docker-compose服务
(4)up -d:启动所有docker-compose服务启动并后台运⾏
(5)exec:进⼊容器实例内部
(6)scale:指定⼀个服务器启动数量
(7)top:显示容器进程
(8)logs:查看容器输出⽇志
(9)down:停⽌并删除容器、⽹络、卷、镜像
(10)stop:停⽌服务
(11)start:启动服务
(12)restart:重启服务
(13)config:检查配置
(14)config -q:检查配置,有问题才有输出
(15)--version:查看版本
docker-compose实例
安装软件
[root@d3 ~]# yum -y install python2-pip
临时使用安装源,指定版本号,安装pip
[root@d3 test]# pip install --upgrade pip==20.3 -i Simple Index
查看pip版本
[root@d3 ~]# pip listpip 20.3
使用阿里云镜像源安装docker-compose,同时忽略已安装的requests库
[root@d3 test]# pip install docker-compose -i Simple Index
[root@d3 ~]# pip install docker-compose --ignore-installed requests -i https://mirrors.aliyun.com/pypi/simple # 具体解释如下: # pip install:这是 Python 的包管理工具pip的安装命令。 # docker-compose:要安装的软件包名称。 # --ignore-installed requests:表示忽略已安装的requests库,只安装docker-compose。 # -i https://mirrors.aliyun.com/pypi/simple:指定使用阿里云的镜像源来加速安装过程。
安装docker,通过执行脚本
[root@d3 test]# sh docker.sh
创建目录,该目录是一个工程
[root@d3 test]# mkdir test
[root@d3 test]# cd test/
创建数据卷目录/root/test/html
[root@d3 test]# mkdir html
[root@d3 test]# echo "怎么回事" >./html/index.html //准备索引文件
[root@d3 test]# tree //用tree命令查看创建的卷目录
修改配置文件,docker环境搭建完成
[root@d3 test]# scp root@192.168.1.21:/etc/docker/daemon.json /etc/docker/
[root@d3 test]# vim /usr/lib/systemd/system/docker.service
... 删除dockerd后面的内容
13行 ExecStart=/usr/bin/dockerd
[root@d3 test]# systemctl daemon-reload
[root@d3 test]# systemctl start docker.service
创建yml文件
[root@d3 test]# vim docker-compose.yml
version: "3" # 指定文件版本services: nginx: # 这是service名 container_name: c1 # 这是容器名 image: "nginx:latest" ports: - "80:80" # 端口映射 volumes: - /root/test/html/:/usr/share/nginx/html/ #挂载[root@d3 test]# lsdocker-compose.yml html
启动compose集群
要在docker-compose.yml文件所在的目录下才能通过docker compose命令启动容器
[root@d3 test]# docker compose up -dWARN[0000] /root/test/docker-compose.yml:
version
is obsolete [+] Running 8/8 ✔ nginx Pulled 42.6s ✔ e4fff0779e6d Pull complete 10.7s ✔ 2a0cb278fd9f Pull complete 16.9s ✔ 7045d6c32ae2 Pull complete 17.0s ✔ 03de31afb035 Pull complete 17.0s ✔ 0f17be8dcff2 Pull complete 17.0s ✔ 14b7e5e8f394 Pull complete 17.0s ✔ 23fa5a7b99a6 Pull complete 17.2s [+] Running 2/2 ✔ Network test_default Created 0.3s ✔ Container c1 Started 0.6s
浏览器可以访问到编写的内容
查看镜像和验证
[root@d3 test]# docker images //创建了yml文件中的nginx镜像REPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 5ef79149e0ec 2 weeks ago 188MB[root@d3 test]# docker ps --all //创建了yml文件中编写的c1容器CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4a60cefd88bd nginx:latest "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp c1