概念
将部署的安全包、配置文件等一次打包放到docker(集装箱)中,方便一次打包,且迁移应用的时候不会因为系统差异而产生问题
部署
参考文档:
docker安装(阿里云源)
-
yum install -y yum-utils device-mapper-persistent-data lvm2
执行结果:
... Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : libaio-0.3.109-13.el7.x86_64 1/10 正在更新 : 7:device-mapper-libs-1.02.170-6.el7_9.5.x86_64 2/10 正在更新 : 7:device-mapper-1.02.170-6.el7_9.5.x86_64 3/10 正在安装 : 7:device-mapper-event-libs-1.02.170-6.el7_9.5.x86_64 4/10 正在安装 : 7:device-mapper-event-1.02.170-6.el7_9.5.x86_64 5/10 正在安装 : 7:lvm2-libs-2.02.187-6.el7_9.5.x86_64 6/10 正在安装 : device-mapper-persistent-data-0.8.5-3.el7_9.2.x86_64 7/10 正在安装 : 7:lvm2-2.02.187-6.el7_9.5.x86_64 8/10 清理 : 7:device-mapper-libs-1.02.170-6.el7.x86_64 9/10 清理 : 7:device-mapper-1.02.170-6.el7.x86_64 10/10 验证中 : 7:device-mapper-event-1.02.170-6.el7_9.5.x86_64 1/10 验证中 : 7:lvm2-libs-2.02.187-6.el7_9.5.x86_64 2/10 验证中 : device-mapper-persistent-data-0.8.5-3.el7_9.2.x86_64 3/10 验证中 : 7:device-mapper-1.02.170-6.el7_9.5.x86_64 4/10 验证中 : libaio-0.3.109-13.el7.x86_64 5/10 验证中 : 7:lvm2-2.02.187-6.el7_9.5.x86_64 6/10 验证中 : 7:device-mapper-libs-1.02.170-6.el7_9.5.x86_64 7/10 验证中 : 7:device-mapper-event-libs-1.02.170-6.el7_9.5.x86_64 8/10 验证中 : 7:device-mapper-libs-1.02.170-6.el7.x86_64 9/10 验证中 : 7:device-mapper-1.02.170-6.el7.x86_64 10/10 已安装: device-mapper-persistent-data.x86_64 0:0.8.5-3.el7_9.2 lvm2.x86_64 7:2.02.187-6.el7_9.5 作为依赖被安装: device-mapper-event.x86_64 7:1.02.170-6.el7_9.5 device-mapper-event-libs.x86_64 7:1.02.170-6.el7_9.5 libaio.x86_64 0:0.3.109-13.el7 lvm2-libs.x86_64 7:2.02.187-6.el7_9.5 作为依赖被升级: device-mapper.x86_64 7:1.02.170-6.el7_9.5 device-mapper-libs.x86_64 7:1.02.170-6.el7_9.5 完毕!
-
yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
需要执行这一步,使用阿里云镜像源,否则会出现‘没有可用软件包’错误
已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * centos-sclo-rh: mirrors.bupt.edu.cn * epel: mirrors.njupt.edu.cn * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com 没有可用软件包 docker-ce。 没有可用软件包 docker-ce-cli。 没有可用软件包 containerd.io。 错误:无须任何处理
-
yum install docker-ce docker-ce-cli containerd.io
碰到此处,选择y继续安装
安装 3 软件包 (+6 依赖软件包) 总下载量:93 M 安装大小:381 M Is this ok [y/d/N]: y Downloading packages:
这里我也是选择y
从 https://mirrors.aliyun.com/docker-ce/linux/centos/gpg 检索密钥 导入 GPG key 0x621E9F35: 用户ID : "Docker Release (CE rpm) <docker@docker.com>" 指纹 : 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35 来自 : https://mirrors.aliyun.com/docker-ce/linux/centos/gpg 是否继续?[y/N]:y Running transaction check Running transaction test Transaction test succeeded Running transaction
-
systemctl start docker
-
systemctl enable docker
执行结果:
systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
-
docker version
执行结果:
docker version Client: Docker Engine - Community Version: 20.10.12 API version: 1.41 Go version: go1.16.12 Git commit: e91ed57 Built: Mon Dec 13 11:45:41 2021 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.12 API version: 1.41 (minimum version 1.12) Go version: go1.16.12 Git commit: 459d0df Built: Mon Dec 13 11:44:05 2021 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.12 GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d runc: Version: 1.0.2 GitCommit: v1.0.2-0-g52b36a2 docker-init: Version: 0.19.0 GitCommit: de40ad0
-
docker run hello-world
docker-compose安装
-
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s
-
uname -m` -o /usr/local/bin/docker-compose执行结果:
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 423 100 423 0 0 494 0 --:--:-- --:--:-- --:--:-- 494 100 16.2M 100 16.2M 0 0 11.4M 0 0:00:01 0:00:01 --:--:-- 52.2M
-
sudo chmod +x /usr/local/bin/docker-compose
-
docker-compose –version
docker-compose version 1.25.1, build a82fef07
docker-compose.yml
修改容器时间和宿主机的一致,添加volumes变量 - /etc/localtime:/etc/localtime即可
prometheus:
container_name: prometheus
image: prom/prometheus:latest
volumes:
- /etc/localtime:/etc/localtime
docker-compose中的depends_on
通过depends_on告诉docker-compose当前服务启动之前先要把depends_on指定的服务启动起来才行。例如:kafka依赖zookeeper,nginx依赖php-fpm等等。
services:
kafka:
image: tflinux_kafka
depends_on:
- zookeeper
php-nginx:
image: tflinux_php-nginx
depends_on:
- php-fpm
常用命令
常见问题
-
问题1:WARNING: Found orphan containers ** command with the –remove-orphans flag to clean it up.
原因:如果将docker-compose的镜像的配置放在同一个目录下时,docker运行时生成的镜像实例会有相同的前缀,就是当前的目录名,也就是说默认相同前缀的是同一组实例,当你在当前目录下还有别的镜像的配置文件,在运行时就会出现以下警告
例如:我将docker-compose文件放在/test/下,启动的kafka名称就为test_kafka_1
解决方案:
-
启动时制定docker容器名称
docker-compose -p kafka -f /root/test/kafka-compose.yml up -d
-
或者将docker-compose文件放到单独的目录下启动
-
-
docker 镜像移除:把为none的移除,注意docker rmi前后空格)
docker images | grep none | awk '{print " docker rmi "$3}' | bash
-
问题2
Mac m1芯片下的镜像有时候在Linux上不能使用,是CPU架构的原因。
报错:
WARNING: The requested image’s platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested 11e1b7fdbfcc7ead314864fae89ce2d2acdea21f93a4777c782c1e1d4e30a8e4
-
执行脚本的时候dockerfile里 bash还是sh,取决于基础镜像的linux版本
否则会报:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: “/bin/bash”: stat /bin/bash: no such file or directory: unknown.
-
dockerfile里执行脚本的时候报 illegal option -问题
脚本文件在windows下编辑过,换行符号是 \r\n而在linux上是\n,因此需要替换换行符
解决办法:
RUN sed -i -e ’s/\r//g' docker-entrypoint.sh ENTRYPOINT [“sh”, “docker-entrypoint.sh”]
使用sed 命令替换即可
-
import可以导入save保存的镜像包和export保存的容器包。但是如果导入的是save保存的镜像包,导入时没有错。但是run运行时就会出错误。
-
import方式导包,可以重命名,而save的不可以
-
如果需要bash的脚本,你的镜像里没有bash命令,其实在dockerfile里装一个就行了
RUN apk update && apk add bash
-
问题:java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
原因:firewalld 的没有信任 docker 的 ip 地址。
解决方案:将所有 docker 的 ip 添加到信任区域
firewall-cmd --zone=trusted --add-source=172.23.0.1/16 --permanent firewall-cmd --reload
docker安装ping
直接安装ping:
apt-get update && apt-get install iputils-ping
报错:
E: List directory /var/lib/apt/lists/partial is missing. - Acquire (2: No such file or directory)
切换到root:
docker exec -it --user root <container id> /bin/bash
再次安装,成功。
执行ping
docker exec -it kafka ping zookeeper
成功
常用命令
docker stats <名称>
停止docker服务
-
停止所有正在运行的容器
docker stop $(docker ps -aq)
-
清除所有已经停止的容器、网络、镜像和数据卷
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
-
停止Docker的网络服务
sudo launchctl unload /Library/LaunchDaemons/com.docker.vmnetd.plist
-
停止Docker的镜像服
sudo launchctl unload /Library/LaunchDaemons/com.docker.hyperkit.plist
-
停止Docker的守护进程
sudo launchctl unload /Library/LaunchDaemons/com.docker.docker.plist
在执行第5条和第6条命令时,如果出现"no such file or directory"的错误,请使用如下命令代替:
sudo launchctl stop com.docker.vmnetd sudo launchctl stop com.docker.hyperkit sudo launchctl stop com.docker.docker
这样就可以停止Docker服务了。