Docker集成方案
重要通知
请翻墙,例如使用 在人间,否则docker无法正常登录,以及无法正常执行其他相关指令。
基本概况
Web 应用的自动化打包和发布,自动化测试和持续集成、发布。
- 官网:https://www.docker.com/
- 参考文档:https://docs.docker.com
- 下载地址:https://www.docker.com/get-started/
- CentOS Docker 安装:https://www.runoob.com/docker/centos-docker-install.html
- MacOS Docker 安装:https://www.runoob.com/docker/centos-docker-install.html
/etc/resolv.conf
/etc/hosts
k8s
账户信息
- Docker ID:ysungod | 邮箱:ysungod@163.com | 密码:Mi_ps_12356
- Docker ID:ysungodwzj | 邮箱:ysungodwj@gmail.com | Mi_124578
基础指令
# 查看版本
docker -v
docker --version
> sudo docker login # MacOS登入,然后输入账号与密码即可
> docker logout # 登出
# 检查 Docker 服务的状态
systemctl status docker
# 启动Dcoker
sudo systemctl start docker
# 重新加载docker
systemctl daemon-reload
# 重启
systemctl restart docker
# 开机自启动
sudo systemctl enable docker
# 禁用开机自启
sudo systemctl disable docker
# 停止
systemctl stop docker
# 注意事项
> 镜像拉取问题,需要翻墙,否则各种操作都受限并报错。
容器(Container)
Docker 容器是一个轻量级、可移植、自给自足的软件环境,用于运行应用程序。容器是应用程序每个组件的隔离进程。
镜像(Image)和容器(Container)的关系
就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
管理容器
# 已经启动过,但是退出了,需要重新进入
docker exec -it [containerID | containerName] /bin/bash
docker exec -it node-docker-build /bin/bash
/usr/bin/docker exec -it node-docker-build-dev /bin/bash
# 查看所有容器
> docker ps -a
# 查看正在运行的容器
> docker ps
# 启动容器,例如 docker run -it ubuntu /bin/bash
> docker run -it [image] [命令]
# 启动容器,但不进入容器
docker run -td --name node-docker-build node:22.15.0
# 不进入容器,但可以执行指令
OWN_NODE_IMAGE_VERSION="node:22.15.0";
OWN_NODE_IMAGE_NAME="node-docker-build";
docker exec "${OWN_NODE_IMAGE_NAME}" /bin/bash -c "cd / && ls ./ -a"
docker exec "${OWN_NODE_IMAGE_NAME}" /bin/bash -c "cd /home && ls ./ -a"
# 执行docker任务
function ownDockerExcuteTask() {
task_cmd=$1
docker exec "${OWN_NODE_IMAGE_NAME}" /bin/bash -c "${task_cmd}"
}
ownDockerExcuteTask "cd /home && ls ./ -a && rm -rf ${ERP_NAME}"
ownDockerExcuteTask "cd /home && git clone ${ERP_GIT_PATH}"
ownDockerExcuteTask "cd /home/${ERP_NAME} && rm -rf .git && npm install"
# 启动已停止容器
> docker start [containerID]
# 停止容器
> docker stop [containerID]
# 重启容器
> docker restart [containerID]
# 删除容器
> docker rm -f [containerID]
# 清除所有已经终止的容器
> docker container prune
# docker查看容器IP地址
> docker inspect [containerID]
容器状态
--------------------------------------------------------------------------------------------------------
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
--------------------------------------------------------------------------------------------------------
created(已创建)
restarting(重启中)
running 或 Up(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
--------------------------------------------------------------------------------------------------------
管理容器内容
# 进入指定容器内环境
> docker exec -it [containerID] /bin/bash // exec 命令会退出容器终端,但不会导致容器的停止。
# 从Linux复制文件到Docker指定容器
> docker cp 本地路径 容器长ID:容器路径
# 将本地文件复制到docker容器指定目录
docker cp /home/download/students.txt node-docker-build:/home
# 将本地文件夹(包含文件与子目录)复制到docker容器指定目录
docker cp /home/download/wj node-docker-build:/home
# 从Docker指定容器复制文件到Linux, 在本地电脑命令行直接执行即可,而不是docker容器环境内执行
docker cp 容器长ID:容器路径 本地路径
docker cp node-docker-build:/home/wj /home/download
相关参数列表
> -i: 交互式操作。
> -t: 终端。
> -d: 让容器在后台运行。
> -P: 随机端口映射,容器内部端口随机映射到主机的端口。-P 8080:80 绑定容器的[8080]端口,并将其映射到本地主机127.0.0.1的[80]端口上。
> -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
> -m: 提交的描述信息
> -a: 指定镜像作者
> --name: 为容器指定一个名称
> -v: 将主机上的一个目录映射到容器内的一个目录中,例如 -v /Users/apple/Downloads/List/music_rhythm_backend/server:/home/server
单个端口映射
> docker run -p 8011:8011
多个端口映射
> docker run -p 8011:8011 -p 8012:8012
使用范围映射
> docker run -p 8011-8013:8011-8013
本地代码映射到容器
配置本地代码与docker容器的同步,修改本地代码,实时同步到容器中,并查看效果,尤其是调试容器中的代码非常便利。
> docker run -v /Users/apple/Downloads/List/music_rhythm_backend/server:/home/game-node
网络访问
docker内部访问宿主机
# mac和windows
> 使用host.docker.internal替换127.0.0.1
注意实现
docker容器内不能使用vim
> apt-get update
> apt-get install -y vim
docker容器内网络请求缓慢问题
Docker 镜像(Image)
Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
基本指令
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
# 列出本地主机上的镜像
> docker images
# 下载镜像
> docker pull [image:version]
# 最新镜像版本
> docker pull [image:latest]
# 查找镜像
> docker search [imageID]
# 启动镜像
> docker run [imageID]
# 删除镜像
> docker rmi [imageID]
# 导出镜像
> docker save -o /home/download/kkfileview-4.3.0.2-docker.tar keking/kkfileview:4.3.0.2
CentOS
docker pull centos:centos7
node.js
# node可用渠道
> docker search node
# 查看node版本
> npm view node versions
# 拉取版本镜像
> docker pull node:22.15.0
> docker run -itd --name node-test node:22.15.0
# 进入容器查看node版本
> docker exec -it node-test /bin/bash
# 案例一
> docker run -v /Users/apple/Downloads/List/music_rhythm_backend/server:/home/game-node -p 8059:8059 -p 6379:6379 -p 4307:4307 -itd --name game-node node:22.15.0 # 启动
# 已经启动过,但是退出了,需要重新进入
> docker exec -it game-node /bin/bash
Nginx
容器端口目前好像只能是80,设置为其他端口就出现无法访问的问题。
# 拉取最新镜像
> docker pull nginx:latest
# 运行容器
> docker run --name nginx-test -p 8010:8010 -d nginx:latest
# 打开容器
> docker exec -it nginx-test /bin/bash
redis
# 拉取最新镜像
> docker pull redis:latest
# 运行容器
> docker run -itd --name redis-tuzhan -p 6379:6379 redis:latest
memcached
# 拉取最新镜像
> docker pull memcached:latest
# 运行容器
> docker run -p 11211:11211 --name memcache memcached:latest
仓库(Repository)
仓库可看成一个代码控制中心,用来保存镜像。
Docker Compose
Docker Dockerfile
Dockerfile 是一个文本文件,包含了构建 Docker 镜像的所有指令。
Docker Machine
Docker Swarm
Kubernetes
安装配置
配置多镜像加速源
国内直连 Docker Hub 网络不稳定,镜像加速器通过国内节点缓存镜像,显著提升下载速度。
- UI界面: 配置翻墙镜像基本没有卵用,国内已全部失效,Docker Desktop -> Settings -> Docker Engine
编辑 /etc/docker/daemon.json(无则新建)
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.1panel.live",
"https://docker.kejilion.pro"
],
"insecure-registries": ["docker.mirrors.ustc.edu.cn"], // 信任非 HTTPS 源
"debug": true, // 开启调试日志
"http-timeout": "300s" // 超时延长至 5 分钟
}
MacOS 安装配置
注意: 应用程序“Docker.app”的这个版本不能与此版本的macOS配合使用。您使用的是macOS 11.6.7。该应用程序要求macOS 12.0或更高版本。
- 手动下载Docker在本地安装后,指令可能会不生效,具体解决方法如下所示。
> vim ~/.bash_profile
# 末尾追加此内容
export PATH=$PATH:/Applications/Docker.app/Contents/Resources/bin/
# 更新
> source ~/.bash_profile
# 验证
> docker -v
华为云配置Docker
> cat /etc/os-release # 查看系统
# 配置华为euler仓库源
> cd /etc/yum.repos.d
> wget https://repo.huaweicloud.com/repository/conf/openeuler_x86_64.repo
> yum clean all
> yum makecache
CentOS安装Docker
# #################### #
#
# 替换方案:手动安装
#
# #################### #
# 添加国内镜像源:以阿里云为例(CentOS系统)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 国内镜像加速配置(必选)
> 创建或修改 /etc/docker/daemon.json,添加国内镜像地址(以腾讯云为例)
sudo mkdir -p /etc/docker # 确保目录存在
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.1panel.live",
"https://docker.kejilion.pro",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
# 验证安装结果
docker -v # 查看版本
docker info | grep Mirrors -A 2 # 检查镜像加速器是否生效
# 启动并验证
sudo systemctl start docker
sudo docker run hello-world # 验证是否成功安装
可能出现的异常问题
# 单击客户端Docker Desktop的Sign in,会跳转到网页进行账户登录,网页登录成功后,会弹出唤起打开客户端的弹窗,这时客户端估计会出现各种异常问题
# 报错一:Login failed:no login session
# 报错二: Post "https://login.docker.com/oauth/token": read tcp [2409:8954:38d4:4679:10b2:450b:e828:11ec]:57835->[2606:4700::6810:5367]:443: read: connection reset by peer
# 报错一:Error saving credentials: error storing credentials - err: exit status 1, out: `Post "https://hub.docker.com/v2/users/login?refresh_token=true": context deadline exceeded (Client.Timeout exceeded while awaiting headers)`
> 当时我的解决方案:直接将MacOS升级到14.2.1 (23C71)版本,如果还是不行,重新启动系统,再次运行,果然可以了。
# 报错二:Error response from daemon: Get "https://registry-1.docker.io/v2/": unauthorized: incorrect username or password
# must use ASL logging (which requires CGO) if running as root
# Error saving credentials: error storing credentials - err: exit status 1, out: ``
window系统安装配置
# 步骤一:下载Download for Windows地址:https://hub.docker.com/ |
# 步骤二:解决出现wsl2 installation is incomplete的弹框报错问题 | 下载一个WSL更新包
> 更新地址:https://link.zhihu.com/?target=https%3A//wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
> https://docs.microsoft.com/zh-cn/windows/wsl/
> 优势:适用于 Linux 的 Windows 子系统可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。
3.配置docker的阿里云镜像(不配置,安装镜像会非常缓慢)
阿里云镜像:https://hg9cuefw.mirror.aliyuncs.com
移除Docker
# 关闭Docker服务并禁止开机自启
sudo systemctl stop docker
sudo systemctl disable docker
# 删除安装包
sudo dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# 卸载核心软件包及依赖
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-ce \
docker-ce-cli \
containerd.io
# 删除镜像、容器、配置文件等内容
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker
sudo rm -rf /var/run/docker.sock
sudo rm -rf /etc/systemd/system/docker.service.d
sudo groupdel docker # 删除用户组
sudo rm -rf /var/log/docker # 清理日志文件
# 移除Docker创建的网桥
sudo ip link set docker0 down
sudo ip link delete docker0
# 查看是否已卸载
docker -v