Docker全环境操作手册(更新中)
Docker知识从入门到精通手册 (标准篇:1-5中级篇:6-7高级篇:8-11)正文1.如何理解docker2.如何安装docker2.1文件下载2.2虚拟机、操作系统安装2.3 docker前置环境安装2.4 docker安装3.如何快速使用docker(常用操作命令)4.如何管理自己的docker仓库4.1 私有仓库创建4.2 harbor仓库创建5.docker镜像创建和使用6.docke
Docker全环境操作手册
期望通过每一次分享,让技术的门槛变低,落地更容易。 —— around
编者寄语
- 本文旨在解决不太会使用docker的同事如何快速的完成想要的应用服务环境搭建和使用。
- 本文预计耗时2个月完成(2021-06-12日正式动笔,实际8.5日投入编写),将由浅入深讲述docker技术的理解和使用,尽可能将能使用到的功能做完整的说明。聚焦解决线下实际问题。
- 期望通过本文能够完全让你懂得docker是什么东西,且能能够独立完成基础操作。对有余力的读者,期望能将高级篇部分掌握,加入公司平台部门共同参与底层框架和技术生态建设。
- 作为一名技术人员,思维和技术底蕴是核心竞争力,科技创新的大海才更令人心潮澎湃。
- 最后,如果本文中画的图比较丑,请私信我,强迫症受不了。
- 本文是有版权的,仅限于学习使用。
- 本文别名《Docker知识从入门到精通手册》
本文面向人群
- 运维部门同事
- 需要创建开发环境的同事
- 有兴趣了解容器化技术的同事
- 对CI/CD、DevOps模式感兴趣的同事
序言
一门新的技术和知识,想要快速的掌握,先得了解他的大概全貌,知道它长什么样,能有什么作用,环境需求是什么样的,有了这些理解后,我们才能更好的去学习它。
我个人一直学习的经验是,了解清楚后,通过目标倒推需要什么技术和基础做支撑,这样才能逐步构建自己的技术思维和设计逻辑,当然到目前为止我以此类方式逐渐发展到现在,掌握了架构设计的种种思路和想法,希望你也能跳出被业务的束缚,让自己的技术给业务插上翅膀,而不是被业务捆住。
程序员不过是门槛比较高罢了,本质都是考验人如何思考和解决问题的能力,我相信很多非技术岗位的人员如果具备了编码能力,很多程序员都会失业,希望各位不要停下学习和在某个领域精研的脚步。
希望透过本文,作者能作为很多人Docker入门到中级阶段的引路人,往后若有其他问题无法解决,请联系作者详细咨询即可。
目录 (标准篇:1-5 / 中级篇:6-7 / 高级篇:8-12)
- 如何理解docker
- 如何安装docker
- 如何快速使用docker(常用操作命令)
- 如何管理自己的docker仓库
- docker镜像创建和使用
- docker镜像、容器操作
- 常用docker镜像、容器制作和使用
- 如何使用dockerfile
- 基于docker搭建各类基础环境
- 如何使用docker-compose
- 如何使用docker配合jekeins自动构建
- 如何使用k8s编排docker
注:如果只是要理解并掌握大部分日常使用,学习第1、2、3、5章到第6章第3节即可
正文
1.如何理解docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
此外,我们需要弄清楚在学习docker中存在的一些特殊名词:
- 镜像:实际上就是模板
- 容器:基于镜像运行起来的操作系统
- 挂载:两个操作系统之间同步文件和数据
- 持久化:可以把想要留下来的资源目录保留
- 映射:将两个不同网络连接起来
- 端口:开放的服务精确指向,是URL的组成部分
- 共享存储:就是将参与共享的系统文件目录映射到一个公共地址上
缺docker图文详解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gTIeq4Xq-1648103527322)(docker手册/main2.png)]
2.如何安装docker
本章节包含全部环境安装到快速执行傻瓜式安装过程。
2.1文件下载
文件内容包含VMwareWorkstation16.0
和CentOS-7-x86_64-Minimal-2009
,其他的命令集合随意选择,可下载也可不下载。
# 先去阿里云盘下载资源(给阿里云盘打个广告,免费不限速)
https://www.aliyundrive.com/s/fhGvqgL3nUt
2.2虚拟机、操作系统安装
下载完成后,请先安装完我们的VMwareWorkstation16.0
,接着打开软件,依次按如下操作。
我们新建一个虚拟机。
在新建面板的配置类型选择上直接选典型
配置,然后下一步
即可。
在下面弹出的操作系统iso选择界面按下图操作,找到之前从云盘上下载的CentOS-7-x86_64-Minimal-2009
文件
在虚拟机存储路径设置上请注意,务必选择自己空间较多的盘符,否则后期扩容有些麻烦。
配置系统空间的时候,默认是20G,请尽量给多点,这个就是虚拟机的全部空间,后面我们会有很多操作都在里面做的,建议直接分到100G空间,它是按需增长的,不是创建完虚拟机后,你的电脑硬盘就会被瞬间占用100G,只是签了个协议,可以慢慢增加,一直到100G就不给了。
最后在配置硬件部分的设置,建议进入自定义硬件
调整,设置合理的CPU
、内存
,并可以删除掉打印机
、声卡
硬件。(即便忘了做此步骤也行,后面可以自己修改的)
最后,点击完成后,虚拟机就创建启动了,下面开始在启动过程中配置相关内容。
请先根据下图选择安装选项,只有30秒默认,如果没来得及操作,就等待步骤2的自检后依然可以进入安装。
等待一段时候,会弹出如下界面设置语言,请通过移入光标或键盘将左侧选项栏拉倒最下选择中文
,后单机继续。
接下来着重在下图界面上配置硬盘
和网络
,如果不配置,后面操作更麻烦。
单击安装位置
选项,进入后直接在左上角点击完成
按钮即可完成保存。
单击网络和主机
选项,进入后按下图操作,除打开网络开关外,还应记得保存当前分配的IP
和DNS
信息,我这里的是IP=10.1.100.132
、DNS=10.1.100.2
。(IP和DNS改网络要用)
完成上述配置后点击开始安装
进行到下一步,在新界面上如下图,去编辑一下Root的密码,单击ROOT密码
,填入自己设置的密码点击保存即可。
以上就完成了Centos系统虚拟机的安装,当系统启动完成后,进入系统,填入账号root
,回车输入密码,即可完成登录。
当登录后记得修改网络信息,建议将动态IP改成静态IP便于后期使用。
# 修改网络
vi /etc/sysconfig/network-scripts/ifcfg-ens33
# 修改部分,找到对应的参数,将下面2个属性设置改成下文内容
BOOTPROTO="static" #dhcp
ONBOOT="yes"
# 到文件末尾,新添加下面4行,IPADDR=IP,GATEWAY和DNS1=DNS,
# 需要将前面的信息填到这里,也可以自己修改其他未被占用的IP,DNS不懂不建议改
IPADDR=10.1.100.132
NETMASK=255.255.255.0
GATEWAY=10.1.100.2
DNS1=10.1.100.2
# 修改完成后保存文本,重新加载网络设置即可生效
service network restart
以上,就是全部关于虚拟机和Centos系统的安装步骤。
2.3 docker前置环境安装
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
vi /etc/selinux/config
# 将下面这行参数属性改为disabled
SELINUX=disabled
# 完成上述操作重启
reboot
# 安装wget
yum install -y wget
# 备份默认的yum (二选一)
# 操作1
mv /etc/yum.repos.d /etc/yum.repos.d.backup
# 设置新的yum目录
mkdir -p /etc/yum.repos.d
# 操作2
cp -rf /etc/yum.repos.d /etc/yum.repos.d.backup
# 下载阿里yum配置到该目录中,选择对应版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# epel源为阿里云epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# 验证文件是否存在
ll /etc/yum.repos.d/
# 重建缓存
yum clean all
yum makecache
# 看一下yum仓库有多少包
yum repolist
yum update
# 升级系统内核(取消)
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm #https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install -y kernel-lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0
# 完成上述操作重启
reboot
# 网桥过滤
vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu = 0
# 生效命令
sysctl --system
# 查看效果
sysctl -a|grep "ip_forward"
# 命令补全安装bash-completion
yum -y install bash-completion bash-completion-extras
# 使用bash-completion
source /etc/profile.d/bash_completion.sh
# 关闭swap分区
swapoff -a
# 永久关闭:
vi /etc/fstab
# 将文件中的/dev/mapper/centos-swap这行代码注释掉
#/dev/mapper/centos-swap swap swap defaults 0 0
# 确认swap已经关闭:若swap行都显示 0 则表示关闭成功
free -m
2.4 docker安装
# 安装阿里云工具包
yum install -y yum-utils device-mapper-persistent-data lvm21
# 设置docker源为阿里云源,避免下载过慢
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fas
# 查看可选版本
yum list docker-ce --showduplicates | sort -r
# 安装docker,版本号可以对应上一个查询的内容
yum install -y docker-ce-19.03.15-3.el7
# 开启docker服务
systemctl start docker
systemctl status docker
# 安装阿里云镜像加速器
mkdir -p /etc/docker
# 配置docker加速下载地址,这个是我私人的阿里云地址,到2021-12月到期
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7mf4ieir.mirror.aliyuncs.com"]
}
EOF
# 重启docker服务
systemctl daemon-reload
systemctl restart docker
# 查看修改后状态
docker info | grep Cgroup
# 设置自动启动
systemctl enable docker
至此,完成docker环境安装,查询docker状态systemctl status docker
。
3.如何快速使用docker(常用操作命令)
本章节将会把docker中存在的所有命令做一个介绍,并对细节进行描述,提供语法示例,下面镜像统一命名mysql:latest
,容器名称统一命名为mysql-contain
,压缩包统一命名mysql.tar
。
同时,对于以下示例,基本是按名称进行操作的,在docker中,既支持用名称也支持用ID,这里可以把镜像名称换成镜像ID去操作,也可以把容器名称换成容器ID去操作。
命令 | 用途 | 简单示例 |
---|---|---|
docker search | 查询image镜像 | docker search mysql |
docker pull | 下载image镜像 | docker pull mysql |
docker images | 查询本地仓库镜像列表 | docker images |
docker ps | 查询本地容器列表 | docker ps -a |
docker load | 加载tar包镜像 | docker load < mysql.tar |
docker import | 加载tar包镜像(修改的东西还在) | docker import mysql.tar |
docker save | 保存镜像tar包镜像 | docker save -o mysql.tar mysql:latest |
docker export | 将容器读写层文件系统导出一个tar包 | docker export -o mysql.tar mysql-contain |
docker rmi | 删除镜像 | docker rmi mysql:latest |
docker tag | 修改镜像名称 | docker tag mysql:latest around/mysql:new |
docker rename | 修改容器名称 | docker rename mysql-contain mysql-new |
docker build | 基于Dockerfile构建镜像 | docker build -f Dockerfile -t around/mysql:latest |
docker run | 启动docker镜像 | docker run --name mysql -d mysql:latest |
docker create | 创建docker镜像但不启动 | docker create --name mysql -d mysql:latest |
docker stop | 停止运行的容器 | docker stop mysql-contain |
docker start | 启动容器 | docker start mysql-contain |
docker restart | 重启容器 | docker restart mysql-contain |
docker exec | 进入容器系统 | docker exec -it mysql-contain bash |
docker cp | 容器与宿主机相互复制文件 | docker cp /data/mysql mysql-contain:/var/lib/mysql |
docker rm | 删除容器 | docker rm mysql-contain |
docker stats | 动态查看容器利用率 | docker stats |
docker logs | 查看容器运行日志 | docker logs mysql-contain |
docker diff | 查询容器启动以来新增文件 | docker diff mysql-contain |
docker inspect | 查询容器信息 | docker inspect mysql-contain |
4.如何管理自己的docker仓库
4.1 私有仓库创建
- 下载镜像
docker pull docker.io/registry
下载完成后查看镜像docker images
,有以下内容则是正确的。
- 创建仓库账号密码
# 生成目录
mkdir -p /data/docker/registry/auth
# around=用户名 4545888=密码 /data/docker/registry/auth/htpasswd = 存储账号密码的文件
docker run --entrypoint htpasswd registry -Bbn around 4545888 >> /data/docker/registry/auth/htpasswd
#如果出现下列报错情况,请参考后续步骤(若没有直接跳过本代码块)
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "htpasswd": executable file not found in $PATH: unknown.
#替换镜像地址,重新下载
docker pull registry:2.5
#替换镜像,重新执行生成账号密码
docker run --entrypoint htpasswd registry2.5 -Bbn around 4545888 >> /data/docker/registry/auth/htpasswd
接着去到htpasswd
路径的地址查看文件内容是否生成了加密的账号密码。
- 配置启动仓库
# 生成配置目录
mkdir -p /data/docker/registry/config
# 创建配置文件
vi /data/docker/registry/config/config.yml
# 添加以下内容
version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
# 结束后,保存文件,启动镜像
docker run -d -p 5000:5000 --restart=always --name=registry\
-v /data/docker/registry/config/:/etc/docker/registry/ \
-v /data/docker/registry/auth/:/auth/ \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
-v /data/docker/registry/:/var/lib/registry/ \
registry:2.5
- 访问仓库
# 编辑docker宿主机
vi /etc/docker/daemon.json
# 在原有文件内添加属性,IP填写当前宿主机的,端口根据之前启动docker外挂出来的端口一致
"insecure-registries":["127.0.0.1:5000"]
# 变成这样
{
"registry-mirrors": ["https://7mf4ieir.mirror.aliyuncs.com"],
"insecure-registries":["10.1.100.128:5000"]
}
# 最后重启docker服务
systemctl daemon-reload
systemctl restart docker
# 登录
docker login 10.1.100.128:5000 -uaround -p4545888
# 出现下列内容则成功
[root@localhost registry]# docker login 10.1.100.128:5000 -uaround -p4545888
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
- 测试上传
# 修改镜像名称,与仓库前缀统一
docker tag registry:latest 10.1.100.128:5000/registry:6.11
# 将新标签镜像上传到私仓
docker push 10.1.100.128:5000/registry:6.11
# 删除本地镜像
docker rmi 10.1.100.128:5000/registry:6.11
# 将私仓的镜像拉下来
docker pull 10.1.100.128:5000/registry:6.11
# 通过以上测试即可完成仓库的镜像上传下载使用,后附校验操作流程图
4.2 harbor仓库创建
后续将补充一个使用Harbor创建镜像仓库服务的教程说明
5.docker镜像创建和使用
# 导入镜像,根据本地文件名导入
docker load < xxxx.tar
# 导出镜像,xxxx.tar=导出存储的文件名 后面空格接的全部是镜像名称
docker save -o xxxx.tar catalog/image1:tag catalog/image2:tag ...
注:导出的镜像不要通过imageid进行导出,否则导入时没有镜像名称了
# 删除镜像
docker rmi <imageID>
# 检索镜像
docker search xxx/image:tag
# 下载镜像
docker pull xxx/image:tag
# 构建镜像,注意后面有个“.”
docker build -f Dockerfile -t image:tag .
# 上传镜像
docker push xxx/image:tag
6.docker镜像、容器操作
6.1 镜像基础情况查询
# 查询仓库已有镜像
docker images <images>
-a:列出本地所有的镜像。
-q:只显示镜像ID。可以与-a组合。
--digests:显示镜像的摘要信息。
--no-trunc:显示完整的镜像信息。
- REPOSITORY:表示镜像的名称。(“/”前信息用于标记所属仓库、用户、源地址等)
- TAG:镜像的标签。
- IMAGE ID:镜像ID。
- CREATED:镜像创建时间。
- SIZE:镜像大小。
6.2 如何启动镜像
镜像作为一个小系统,也是需要启动才具有使用意义的,在我们不具备制作镜像的能力之前,我们先学会如何运行镜像。
# 启动命令
docker run
--name:给容器起一个名称
-p:设置端口号,<容器外端口>:<容器内端口> (允许出现多次)
-v:挂载,<容器外目录>:<容器内目录> (允许出现多次)
-e:环境变量,配置到系统里的属性。 (允许出现多次)
-d:镜像名称,表示启动指定的镜像
# 例子
docker run --name rabbitmq3 \
-v /data/rabbitmq:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=netiler \
-e RABBITMQ_DEFAULT_PASS=netilermanager \
-p 15672:15672 -p 5672:5672 \
-d rabbitmq:3.8.2-management
# 容器关闭
docker stop rabbitmq3
# 容器重启
docker restart rabbitmq3
# 容器删除
docker rm rabbitmq3
注:如果容器不是关闭的是不能删除的,如果容器没删除,是不能删除对应镜像的
6.3 如何查询容器状态
容器运行起来之后,是需要进行管理和使用的,我们可以通过以下命令查看容器的状态和信息
# 查询容器
docker ps
# 查询所有容器
docker ps -a
# 查询容器日志
docker logs <容器id>
6.4 如何进入容器进行操作
能够进入的容器,必须是启动正常的容器。
# 进入容器
docker exec -it <容器id或容器名称> bash
进入后相当于一个新的linux系统,在内部有相关的各种各样的软件已经安装,退出容器就比较简单了,执行exit
即可。
6.5 如何修改运行中的容器
对运行中的容器,修改的最多的就是开放的端口号,这里以修改外放端口号为例子进行,将映射端口由2444变为3444。
# 查询运行中的容器
docker ps -a
注意查看容器对应的ContainerID
值,为77f45e7327e8
这里的id省略了很多字符。
接着进入目录/var/lib/docker/containers
,查看下面的内容,你会发现运行的容器相关配置都存储在该目录下,但因是id文件夹名称,所以用上面查询到的ContainerID
与文件夹开头一定字符进行匹配,相同则是该容器的设置目录。
之后进入该容器目录,找到hostconfig.json
文件,该文件为修改端口映射的配置文件,我们进入其中找到源端口2444
,将其改为3444
。
修改完成后保存即可退出,重启一下docker即可生效。
systemctl restart docker
以上,就完成了docker映射端口的更改。
7.常用docker镜像、容器制作和使用
本章节包含java开发过程中常见的各类中间件和运行环境搭建和正常使用。尽量做到提供完美无缝的环境提供和技术支持。
7.1 tomcat
关于tomcat正常能运行,除了需要tomcat软件外,还需要支持的jdk,目前主要稳定的是jdk1.8和tomcat8版本,我们围绕一下提供支持。
docker官方对tomcat镜像制作的文档见下网址:
https://hub.docker.com/_/tomcat
提供一个人的Dockerfile
文件
#Dockerfile
FROM inovatrend/tomcat8-java8:latest
MAINTAINER around <358706237@qq.com>
CMD /opt/tomcat/bin/shutdown.sh
RUN sed -i 's|"8080"|"7080"|' /opt/tomcat/conf/server.xml
# 需要本地给catalin.sh设置chmod权限
COPY catalina.sh /opt/tomcat/bin/catalina.sh
RUN ln -s /opt/tomcat/webapps /webapp
COPY ROOT /webapp/ROOT/
RUN rm -rf /webapp/ROOT/WEB-INF/classes/
COPY classes /webapp/ROOT/WEB-INF/classes/
COPY lib /webapp/ROOT/WEB-INF/lib/
COPY netiler /webapp/ROOT/WEB-INF/netiler/
VOLUME ["/webapp/ROOT/WEB-INF/resource","/webapp/ROOT/WEB-INF/pref"]
EXPOSE 8080
CMD ["catalina.sh", "run"]
提供常用命令集合
# 构建镜像
docker build -f Dockerfile.centos.tomcat -t goodrain.me/around-tomcat8:v1 .
# 启动镜像
docker run --name tomcat8 \
-v /nas/webapp/netiler/:/webapp \
-v /nas/logs:/opt/tomcat/logs \
-p 16888:6888 \
-p 8080:8080 \
-d around/tomcat-ce:v3
# 直接启动镜像
docker run --name tomcat8.1 -v/data/tomcat/webapp:/opt/tomcat/webapps -v /data/tomcat/logs:/opt/tomcat/logs -p 8080:8080 -d inovatrend/tomcat8-java8:latest
7.2 mysql
在mysql的使用上,如果是公司项目上,建议容器统一上到5.7版本,否则需要配置mysql以socket方式连接,不然会因为项目启动连接次数过多导致mysql服务崩溃。
以下为我个人提供的Dockerfile,请参考下面注释做使用
FROM mysql:5.7.27
# 配置用户名密码和默认数据库
ENV MYSQL_ROOT_PASSWORD=netilermanager
ENV MYSQL_USER=netiler
ENV MYSQL_PASSWORD=netilermanager
# 在dockerfile同目录创建一个mysqld.cnf,内容后面给出,此处宿主机的mysqld.cnf请一定给755权限,不然build失败
COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
# 给出一个初始化脚本,mysql5.7提供了默认初始化,如果没有会导致用户都无法登录,可以把你授权、创建账号写成sql脚本放进去
COPY sql/*.sql /docker-entrypoint-initdb.d/
补充mysqld.cnf
文件,请直接以下面内容创建即可
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
lower_case_table_names=1
character-set-server=utf8
collation-server=utf8_general_ci
max_connections = 3500
max_connect_errors = 20
interactive_timeout = 288000
wait_timeout = 288000
default-storage-engine=INNODB
sort_buffer_size = 32M
join_buffer_size = 128M
max_allowed_packet = 1024M
tmp_table_size = 2097152
explicit_defaults_for_timestamp = 1
read_buffer_size = 16M
read_rnd_buffer_size = 32M
query_cache_type = 1
query_cache_size = 2M
table_open_cache = 1500
table_definition_cache = 1000
thread_cache_size = 768
back_log = 3000
open_files_limit = 65536
#skip-name-resolve
########innodb settings########
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_buffer_pool_size = 6144M
innodb_file_per_table = on
innodb_buffer_pool_instances = 20
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_log_file_size = 300M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#log-error = /var/log/mysql/error.log
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
#!includedir /etc/mysql/conf.d/
7.3 rabbitmq
#官网
https://hub.docker.com/_/rabbitmq
#更多配置
https://www.rabbitmq.com/configure.html
#下载
docker pull rabbitmq:3-management
#也可通过此方式,额外下载插件
docker build -f Dockerfile.centos.rabbitmq -t goodrain.me/around-rabbitmq:v3 .
#启动
docker run \
--name rabbitmq3 \
-v /data/rabbitmq:/var/lib/rabbitmq \
-e RABBITMQ_DEFAULT_USER=netiler \
-e RABBITMQ_DEFAULT_PASS=netilermanager \
-p 15672:15672 \
-p 5672:5672 \
-d rabbitmq:3-management
7.4 redis
直接在官方上抄他们的dockerfile,通过上述3、6章节进行docker build
构建即可生成镜像,甚至可以不去构建,直接使用docker run
#官网
https://hub.docker.com/_/redis
# 启动一个镜像
docker run --name redis -p 6379:6379 -d redis:latest --appendonly yes
docker run --name --name myredis redis redis-server /usr/local/etc/redis/redis.conf
docker run --name redis -p 6379:6379 -d hczy-redis:v3 /usr/local/etc/redis/redis.conf
7.5 nacos
#新建logs目录
mkdir -p /mydata/nacos/logs/
mkdir -p /mydata/nacos/init.d/
#修改配置文件
vi /mydata/nacos/init.d/custom.properties
对于custom.properties
内容应该是
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://xx.xx.xx.x:3306/nacos_devtest_prod?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=user
db.password=pass
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
直接启动命令
docker run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=512m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-v /mydata/nacos/logs:/home/nacos/logs \
-v /mydata/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
nacos/nacos-server
7.6 elasticSearch
# 基本启动命令
# -e "discovery.type=single-node" \ 单节点集群
# -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ 制定运行参数,不然如果机器内存太小,启动后会非常卡顿
# --name 起个别名
docker run -p 9200:9200 -p 9300:9300 --name es7.8 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-d goodrain.me/around-elasticsearch:v1
#去当前的镜像中修改一下配置,这个ES_JAVA_OPTS参数指向的时候,自动根据空格截取了,导致只保留了-Xms512m,还是改成-Xms512m -Xmx512m
docker run -p 9200:9200 -p 9300:9300 --name es7.8 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-d elasticsearch:7.8.0
docker run -p 9200:9200 -p 9300:9300 --name aroundes7 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-d goodrain.me/around-elasticsearch:v2
# 查看集群健康状态
GET /_cat/health?v
# 查看节点健康状态
GET /_cat/nodes?v
# 查看索引信息
GET /_cat/indices?v
# Ik分词器版本要和ES和Kibana版本保持一致
# 进入容器
docker exec -it elasticsearch /bin/bash
#此命令需要在容器中运行
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip
# 退出容器,重启容器
docker restart elasticsearch
7.7 nginx
docker run --name mynginx \
-d -p 82:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/logs:/var/log/nginx \
-d docker.io/nginx
7.8 kuboard
# 管理节点
http://192.168.3.50:32567/
# 快速启动
docker run -d --restart=unless-stopped --name=kuboard \
-p 10080:80/tcp \
-p 10081:10081/udp \
-p 10081:10081/tcp \
-e KUBOARD_ENDPOINT="http://192.168.3.50:10080" \
-e KUBOARD_AGENT_SERVER_UDP_PORT="10081" \
-e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
-v /root/kuboard-data:/data/kuboard-data \
eipwork/kuboard:v3
#基于K8s完成kuboard使用
https://blog.csdn.net/weixin_47153988/article/details/108882658?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&dist_request_id=1328775.4580.16176801215959527&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecas
# 执行
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
# 生成token
[root@k8s-master01 yaml]# kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')
Name: kuboard-user-token-kr7d6
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: kuboard-user
kubernetes.io/service-account.uid: f487898d-15ea-4794-bc3d-720c037d15c9
Type: kubernetes.io/service-account-token
# 将token填入kuboard
7.9 harbor
7.10 gitlab
# 下载
docker pull gitlab/gitlab-ce
# 启动命令
docker run --name gitlab -p 443:443 -p 80:80 -p 22:22 \
-v /data/server/gitlab/config:/etc/gitlab \
-v /data/server/gitlab/logs:/var/log/gitlab \
-v /data/server/gitlab/data:/var/opt/gitlab \
-d gitlab/gitlab-ce --restart=always
# 配置
vi /data/server/gitlab/config/gitlab.rb
# 配置http协议所使用的访问地址,不加端口号默认为80
external_url 'http://10.1.100.129'
# 配置ssh协议所使用的访问地址和端口
gitlab_rails['gitlab_ssh_host'] = '10.1.100.129'
gitlab_rails['gitlab_shell_ssh_port'] = 22 # 此端口是run时22端口映射的222端口
:wq #保存配置文件并退出
# 配置
vi /data/server/gitlab/data/gitlab-rails/etc/gitlab.yml
vi /data/server/gitlab/data/nginx/conf/gitlab-http.conf
配置完成后重启
gitlab-ctl reconfigure 让gitbal重新读取配置
gitlab-ctl hup nginx nginx更新配置
gitlab-ctl restart
# 进入管理
gitlab-rails console -e production
# 修改账号密码
user = User.where(id: 1).first
user.password = 'hczy2021'
user.password_confirmation = 'hczy2021'
user.save!
8.如何使用dockerfile
Dockerfile
本质上就是一个脚本,它里头有特殊语法,也能支持linux命令操作,为此我们需要如何掌握好这个Dockerfile
,关键就是学习语法,下面我们看一个Dockerfile
。
FROM mysql:latest
# 同 linux cd
#WORKDIR /data/server/soft2
WORKDIR /data/server/soft2
xxxxxx
WORKDIR /data/server/mysql
xxxxx
# 开启执行linux命令
RUN mkdir -p /data/server
# cpoy config:指的是当前dockerfile所在的计算机目录
COPY config /webapp/config
COPY config2 /webapp/copy-test
ADD config2 /webapp/config2
ADD http://www.baidu.com/download/map.tar /webapp/config3
EXPOSE 7080
CMD ["catalina.sh", "run"]
8.1 dockerfile语法详解
命令 | 说明 | 语法示例 |
---|---|---|
FROM | 指定创建镜像,可以填写多个 | FROM mysql:latest |
LABEL | 创建标签信息 | LABEL user=around |
MAINTAINER | 作者信息,写在FROM后 | MAINTAINER around visket@2008.sina.com |
COPY | 当复制一个目录时,并不会复制目录本身,而是会递归复制其下子目录 | COPY data /data/ |
ADD | ADD指令类似于COPY指令,ADD支持使用TAR文件和URL路径 | ADD [“src”,…“dest”] |
WORKDIR | 指定工作目录 | WORKDIR /data/server |
RUN | 执行linux命令 | RUN mkdir -p /data/server |
CMD | 类似于RUN指令,CMD指令也可用于运行任何命令或应用程序 | CMD [“catalina.sh”, “run”] |
ENTRYPOINT | 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一具单独的可执行程序 | ENTRYPOINT [“docker-entrypoint.sh”] |
EXPOSE | 指定开放端口 | EXPOSE 8080 |
ENV | 设置环境变量 | ENV default_password 123456 |
ARG | 设置dockerfile作用域内的变量 | ARG namespace=mysql |
USER | 指定运行docker的user或userid信息 | USER around |
ONBUILD | 让docker镜像私有package配置,后正常接上述所有语法 | ONBUILD COPY ./package.json /app |
8.2 制作一个Tomcat镜像
以tomcat为例
FROM goodrain.me/hczy-tomcat8-jdk8-basic:v8
ARG NETILER_SPACE=im
ARG NETILER_PORT=7102
CMD /opt/tomcat/bin/shutdown.sh
RUN sed -i 's|"8080"|"7102"|' /opt/tomcat/conf/server.xml
RUN rm -rf /webapp/ROOT/WEB-INF/classes/*
COPY deploy/classes/ /webapp/ROOT/WEB-INF/classes/
COPY deploy/jar/lib/ /webapp/ROOT/WEB-INF/lib/
COPY deploy/jar/netiler/ /webapp/ROOT/WEB-INF/netiler/
RUN rm -rf /webapp/ROOT/WEB-INF/lib/leadal-netiler-3.0.0-SNAPSHOT.jar
#VOLUME ["/webapp/${NETILER_SPACE}/WEB-INF/resource","/webapp/${NETILER_SPACE}/WEB-INF/pref"]
EXPOSE ${NETILER_PORT}
CMD ["catalina.sh", "run"]
8.3 制作一个JDK镜像
FROM openjdk:8-jdk-alpine
MAINTAINER around
ENV FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS=true
ENV TimeZone=Asia/Shanghai
ENV LANG=zh_CN.UTF-8
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache
# createUser
RUN useradd --create-home --no-log-init --shell /bin/bash leadal \
&& echo 'leadal:leadal' | chpasswd
# use user
# USER leadal
RUN mkdir -p /webapp \
&& mkdir -p /libs
VOLUME /webapp/WEB-INF/resource
VOLUME /webapp/WEB-INF/pref
#ARG JAR_FILE=xxx.jar
#ADD ${JAR_FILE} app.jar
#ENTRYPOINT ["java","-jar","app.jar","-Djava.ext.dirs=libs"]
#EXPOSE 9999
8.4 制作一个CentOS镜像
FROM centos:7
#AUTHOR
MAINTAINER around <358706237@qq.com>
#安装wget
RUN yum install -y wget
#更换yum源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup \
&& wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo \
&& yum clean all \
&& yum makecache
#安装工具集
RUN yum install -y zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools git
#环境变量
ENV JAVA_VERSION 8u281
ENV JAVA_BUILD b01
ENV JAVA_HOME /usr/java/jdk1.8.0_281
# http://download.oracle.com/otn-pub/java/jdk/8u281-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u281-linux-x64.rpm
# 安装jdk
RUN curl -v -j -k -L -H "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION}-${JAVA_BUILD}/090f390dda5b47b9b721c7dfaa008135/jdk-${JAVA_VERSION}-linux-x64.rpm > /tmp/jdk-linux-x64.rpm && \
yum -y install /tmp/jdk-linux-x64.rpm && \
rm /tmp/jdk-linux-x64.rpm && \
yum clean all
#安装 graphicsImagick
#1.创建目录
RUN mkdir -p /home/download
#2.安装libjpeg,libpng...
RUN yum install -y libpng-devel libjpeg-devel libtiff-devel jasper-devel freetype-devel
#3.安装graphicsImagick
WORKDIR /home/download
RUN wget http://ftp.icm.edu.pl/pub/unix/graphics/GraphicsMagick/1.3/GraphicsMagick-1.3.25.tar.gz
RUN tar -xvf GraphicsMagick-1.3.25.tar.gz
WORKDIR /home/download/GraphicsMagick-1.3.25
RUN ./configure \
&& make && make install
#4.安装ffmpeg
WORKDIR /home/download
#ADD ffmpeg-release-64bit-static.tar.xz /home/download/
# https://www.ffmpeg.org/releases/ffmpeg-3.2.8.tar.gz
# ffmpeg-static下载的版本可能和配置的不对应
RUN wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
RUN tar -xvf ffmpeg-release-64bit-static.tar.xz
WORKDIR /home/download/ffmpeg-3.3.4-64bit-static
RUN cp {ffmpeg,ffmpeg-10bit,ffprobe} /usr/bin
#5.安装libreoffice
WORKDIR /home/download
# ADD LibreOffice_5.2.5_Linux_x86-64_rpm.tar.gz /home/download/
# RUN wget http://download.documentfoundation.org/libreoffice/stable/5.3.6/rpm/x86_64/LibreOffice_5.3.6_Linux_x86-64_rpm.tar.gz
RUN wget http://ftp.rz.tu-bs.de/pub/mirror/tdf/tdf-pub/libreoffice/stable/5.2.5/rpm/x86_64/LibreOffice_5.2.5_Linux_x86-64_rpm.tar.gz
RUN tar -xvf LibreOffice_5.2.5_Linux_x86-64_rpm.tar.gz
WORKDIR /home/download/LibreOffice_5.2.5.1_Linux_x86-64_rpm
RUN yum localinstall -y RPMS/*.rpm
RUN yum install -y cairo cups-libs libSM
ENV DISPLAY :0.0
#6.安装xpdf,swftools
WORKDIR /home/download
# RUN wget ftp://ftp.foolabs.com/pub/xpdf/xpdfbin-linux-3.04.tar.gz
# RUN tar -xvf xpdfbin-linux-3.04.tar.gz
ADD xpdfbin-linux-3.04.tar.gz /home/download/
WORKDIR /home/download/xpdfbin-linux-3.04
RUN cp bin64/* /usr/bin
# RUN wget http://www.swftools.org/swftools-2013-04-09-1007.tar.gz
# RUN tar -xvf swftools-2013-04-09-1007.tar.gz
ADD swftools-2013-04-09-1007.tar.gz /home/download/
WORKDIR /home/download/swftools-2013-04-09-1007
RUN ./configure --prefix=/usr/swftools && \
make && make install
#7.设置环境变量
ENV PATH /usr/swftools/bin/:$PATH
ENV OFFICE_ROOT /opt/libreoffice5.2
#8.安装字体,避免转换中文乱码
ADD simsun.ttc /usr/share/fonts/
RUN chmod 644 /usr/share/fonts/simsun.ttc & fc-cache -fv
9.基于docker搭建各类基础环境
9.1 nexus3
先下载官方镜像
docker pull sonatype/nexus3
接着执行启动,这里建议挂载目录调整一下
docker run --name nexus \
-p 8081:8081 \
-v /data/nexus3:/var/nexus-data \
--restart=always -d sonatype/nexus3
10.如何使用docker-compose
11.如何使用docker配合jekeins自动构建
12.如何使用k8s编排docker
更多推荐
所有评论(0)