本文记录Docker相关操作,备忘。
前言
保证Linux内核为3.0+,否则建议升级内核版本
1 | # 查看linux内核 |
以下操作请使用root用户操作
注意:以下部分脚本需要根据自身情况和容器镜像版本自行改动,比如挂载目录,相关环境参数等。
不同版本镜像的容器内目录也不一样,需要自己去查看,然后挂载启动。
内网安装Docker
下载二进制安装包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz
https://download.docker.com/linux/static/stable/x86_64/
我这边选择的是 docker-20.10.7.tgz 这个版本
下载完成后放到 /opt/docker/install-packages 目录下
1 | [root@docker ~]# mkdir -p /opt/docker/install-packages |
解压安装包
1 | cd /opt/docker/install-packages |
将docker文件移到系统可执行文件目录下
如果不移到可执行文件目录下则docker指令用不了
1 | [root@docker docker]# ls |
配置docker.service
1 | vi /usr/lib/systemd/system/docker.service |
内容如下:
1 | [Unit] |
启动docker服务
1 | systemctl daemon-reload |
开机自启动docker
1 | systemctl enable docker |
注意:内网安装docker没有办法从公网拉取任何东西,除非自己打包镜像到服务器运行
公网安装Docker
安装
1 | # 1、卸载旧版本 |
阿里云镜像加速
推荐安装 1.10.0 以上版本的 Docker 客户端
配置镜像加速器
您可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器
1 | # 1.创建一个目录 |
常用命令
帮助命令
1 | # 查看docker的版本信息 |
镜像命令
1 | # 查看所有本地主机上的镜像 可以使用 docker image ls 代替 |
容器命令
1 | # 新建容器并启动 |
退出容器
1 | # 容器直接退出 |
删除容器
1 | # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf |
查看容器中进程信息
1 | docker top 容器id |
查看镜像的元数据
1 | docker inspect 容器id |
保存对应镜像
保存对应的镜像,以便于在无网环境中使用
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
Docker安装各个组件
MySQL
公网
1 | # 拉取镜像 |
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
Redis
公网
1 | # 拉取镜像 |
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
Nginx
搭建临时容器
为的是将初始配置拿出来,防止挂载是找不到文件报错。
1 | # 拉取镜像 |
公网
1 | docker run -p 80:80 --name nginx1.21.1 \ |
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
MinIO
公网
1 | # 拉取镜像 |
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
登录控制台
访问 9000 端口,然后使用上面指定的用户和密码登录系统
Nacos
搭建临时容器
1 | # 拉取镜像 |
导入Nacos数据表
由于Nacos配置要持久到外部数据源中,这里使用MySQL作为持久化数据库,下面是SQL,创建nacos_config数据库,然后执行以下SQL
注意:此处的Nacos数据表需要根据自己安装的Nacos版本来,不同版本的数据表可能有差别,自己去官网获取即可。
1 | /******************************************/ |
公网
1 | # 启动容器 |
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
ES和Kibana
公网
elasticsearch
1 | # 拉取镜像 |
kibana
1 | # 可视化工具kibana |
编写kibana配置
1 | mkdir -p /my-container/elasticsearch/kibana/config |
输入以下内容
1 | server.name: kibana |
1 | # 启动kibana容器 |
- ES访问地址:[
ip地址:9200
]
账号密码:elastic/Hallo@123
- kibana访问地址:[
ip地址:5601/app/dev_tools#/console
]
账号密码:elastic/Hallo@123
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
RocketMQ
用 docker-compose 方式创建,比较方便
公网
1 | # 拉取镜像 |
内网
在公网环境
保存对应镜像,上传到对应服务器,启动容器即可。
1 | # 进入到保存镜像的目录,执行如下命令 |
将安装包保存起来,上传到对应服务器
1 | # 将安装包加载到镜像中 |
Ftp
1 | docker run -d -v /home/ftp:/home/vsftpd \ |
PASV_ADDRESS的地址被动模式
需要使用,需要设置为宿主机的IP,否则文件无权限查看。
镜像导入导出脚本
导出脚本
1 |
|
导入脚本
1 |
|
Docker-compose安装各个组件
注意以下内网环境的镜像均为从公网环境导出的
安装Docker-compose
公网
1 | # 下载docker-compose二进制文件 |
内网
从公网下载对应的docker-compose二进制文件,然后上传到服务器的 /usr/local/bin
目录,命名为 docker-compose
1 | # 从公网下载,输出的路径即为公网下载路径 |
MySQL
1 | mkdir -p /my-docker-compose/mysql |
编写yml文件
1 | version: '3' |
构建
1 | docker-compose -f docker-compose-mysql5.7.yml -p mysql5.7 up -d |
Redis
1 | mkdir -p /my-docker-compose/redis |
编写yml文件
1 | version: '3' |
构建
1 | docker-compose -f docker-compose-redis.yml -p redis up -d |
Nginx
1 | mkdir -p /my-docker-compose/nginx |
编写yml文件
1 | version: '3' |
构建
构建前记得复制对应的挂载文件,否则会报找不到文件错误
1 | [root@docker nginx]# pwd |
1 | # 拉取镜像 |
1 | docker-compose -f docker-compose-nginx.yml -p nginx up -d |
Nacos
1 | mkdir -p /my-docker-compose/nacos |
编写yml文件
1 | # Nacos文档:https://nacos.io/zh-cn/index.html |
构建
构建前记得复制对应的挂载文件,否则会报找不到文件错误
1 | [root@docker nacos]# pwd |
1 | # 拉取镜像 |
1 | # tips: 构建前请先保证对应数据源可用,并创建了nacos相关数据库表 |
MinIO
1 | mkdir -p /my-docker-compose/minio |
编写yml文件
1 | version: '3' |
构建
1 | docker-compose -f docker-compose-minio.yml -p minio up -d |
ES和Kibana
前置挂载
编写配置文件便于挂载
1 | # ES配置 |
编写yml文件
1 | mkdir -p /my-docker-compose/elasticsearch |
1 | version: '3' |
构建
1 | # 当前目录下所有文件赋予权限(读、写、执行) |
- ES访问地址:[
ip地址:9200
]
账号密码:elastic/Hallo@123
- kibana访问地址:[
ip地址:5601/app/dev_tools#/console
]
账号密码:elastic/Hallo@123
RocketMQ
前置挂载
1 | mkdir -p /my-docker-compose/rocketmq/rocketmq/rocketmq_broker/conf |
输入以下内容
1 | # Licensed to the Apache Software Foundation (ASF) under one or more |
编写yml文件
1 | mkdir -p /my-docker-compose/rocketmq |
1 | version: '3' |
构建
注:修改
/my-docker-compose/rocketmq/rocketmq/rocketmq_broker/conf/broker.conf
中配置brokerIP1
为宿主机IP
1 | docker-compose -f docker-compose-rocketmq.yml -p rocketmq up -d |
访问地址 http://ip地址:9002
前置挂载脚本
由于有不少组件需要提前将部分配置文件准备好,以便于和容器相关目录以及文件挂载,这里写个脚本统一创建以上组件需要的目录和配置文件及其内容
这里比如说我将上面各个组件都挂载在 /app/docker-compose
下
1 |
|
Docker-compose批量编排
编写环境变量文件
在docker-compose.yml同级目录下面创建
.env
文件value不要加引号,引用会自动添加
在docker-compose.yml中使用key引用
如果环境变量文件不和docker-compose.yml在同一级目录下,则需要在docker-compose.yml文件中指定环境变量文件所在位置,比如
1
2
3
4
5version: '3'
services:
mysql:
env_file:
- file.env # 相对于docker-compose.yml文件的位置
这里我就直接放在 docker-compose.yml 的同级目录下面了
.env
1 | # 挂载目录 |
编写容器编排文件
docker-compose.yml
1 | version: '3' |
构建
如果记不住命令,这个命令也可以单独写作脚本运行
1 | docker-compose -f docker-compose.yml up -d |
Harbor
因为工作需要,有时候是需要完全断网环境,此时需要在内网环境中离线安装[Harbor]私有仓库。
系统环境描述
主机:X86_64架构,8G内存 (期待啥时候等有机会找一台国产化机器安装一个其他架构的版本)
操作系统:CentOS 7.9
作为私有仓库,建议硬盘尽量大一些,我使用的200GB,可以推荐使用1TB以上。
准备工作
找一台能上网的机器(需要能运行docker),下载下面三类文件
可以根据之前的教程进行 docker 和 docker-compose 的安装
Docker-ce的离线安装包
到 Docker离线安装包 地址查找符合自己主机系统和架构的docker-ce安装包版本,下载对应版本的docker安装文件。
Docker-compose的离线安装包
到Docker-compose离线安装包 地址查找最新的docker-compose版本
下载最新版的 docker-compose 文件,下载后将 docker-compose-linux-x86_64
重命名为 docker-compose(后续上传到 linux 机器后还得赋予执行权限),具体参照上文
harbor的离线安装包
到 Harbor离线安装包 地址查找最新的harbor离线包版本
本文写作时版本为 2.6.3
将下载后的安装包上传到服务器的对应目录,比如 /opt/docker/install-packages
harbor需要的prepare镜像包
1 | # 公网环境拉取对应的镜像 |
harbor安装
以下操作在准备安装harbor的linux服务器上进行
使用Xshell连接到harbor主机上(本人比较懒,直接使用的root账户,这样很多操作比较方便,不必每次都输密码,如果是使用非root账户,或者ubuntu服务这种,需要在命令前加sudo)
1 | cd /opt/docker/install-packages |
修改 harbor.yml
,harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可! 所以 把https相关的已经注释掉(实话是,配置https实在有点麻烦)
在公司内部使用,如果用了公司的dns,哪就可以采用域名作为hostname,如果是其他ip,请自行更换,注意以下红框标注部分,并注意配置文件的用户名密码配置,默认用户名是:admin,密码是:Harbor12345,如果修改需要安装前修改,这里我密码修改了。
1 | # 此处更换成自己的ip |
将 goharbor_prepare_v2.6.3.tar 执行装载
1 | cd /opt/docker/docker-images |
执行安装命令,先执行预处理命令,会创建一些文件夹,初始化一些文件
1 | ./prepare |
然后开始真正的安装过程,注意容器信息可能会冲突
比如你之前启动的容器和Harbor的容器重名,这是你需要将之前创建的容器改名
1 | ./install.sh |
因为镜像已经在相关目录中,所以不需要下载。等待一会后,看到如下信息表示安装成功。
1 | [Step 5]: starting Harbor ... |
编译一个harbor启动服务文件,可将harbor作为服务启动,便于今后使用
1 | vi /lib/systemd/system/harbor.service |
文件内容如下:
这里docker-compose命令的地址和harbor编排文件的地址,自己根据实际情况指定
1 | [Unit] |
启动harbor.service文件使之生效
1 | systemctl enable harbor |
如果在安装后修改了harbor的配置文件,则需要重启才能生效
1 | cd /opt/docker/install-packages/harbor |
docker客户端访问
1 | vi /etc/docker/daemon.json |
输入以下内容,这里的ip和端口根据实际情况来
1 | { |
修改了daemon.json文件后需要重载配置并重启docker服务和harbor服务,并登陆私有仓库
注意:如果重启了docker服务,最好同时再重新启动一下harbor服务,不然可能出现问题。
1 | systemctl daemon-reload |
xxl-job
编写编排文件:docker-compose-xxl-job.yml
1 | # 参考文档: https://www.xuxueli.com/xxl-job |
注意:其中的mail相关的信息,根据实际情况配置即可。
启动:
1 | docker-compose -f docker-compose-xxl-job.yml -p xxl-job up -d |
访问地址:http://ip地址:9003/xxl-job-admin
默认登录账号密码:admin/123456
启动成功以后在自己的项目中配置使用即可。
查看下载镜像的Dockerfile文件
1 | docker history --format{{.CreatedBy}} --no-trunc=true 镜像id |sed "s/\/bin\/sh\ -c\ \#(nop)\ //g"|sed "s/\/bin\/sh\ -c/RUN/g"| tac |