Docker相关的一些安装、命令、操作记录。
# Docker 基本概念
# Windows 安装 Docker
打开CMD
或Powershell
就可以愉快的玩耍Docker了
# Ubuntu 安装 Docker
// 更新仓库源
sudo apt update
// Ubuntu 自带docker.io源
sudo apt install docker.io -y
// 方法二
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 国内加速docker
创建docker配置文件并添加:
sudo vi /etc/docker/daemon.json
在 etc/docker/daemon.json
中添加:
{
"insecure-registries":["https://harbor.ant-lord.com"],
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
// :%d 删除所有内容
{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://139.224.223.183:3100/loki/api/v1/push",
"max-size": "500m",
"max-file": "10",
"env": "app_name,app_env"
},
"insecure-registries":["https://harbor.ant-lord.com"],
"registry-mirrors": ["https://dockerproxy.net"]
}
在运行:
systemctl daemon-reload
systemctl restart docker
# Docker打包下载到Harbor
docker pull postgres:16.0 --platform=linux/amd64
docker tag [Image ID] harbor.ant-lord.com/library/[镜像名称:镜像TAG]
docker push harbor.ant-lord.com/library/[镜像名称:镜像TAG]
# 常用命令
// 基本
docker version // 查看版本详情
docker -v // 查看版本简单版
// 搜索
docker search ubuntu
// 拉取
docker pull ubuntu:latest // tag:最新版
docker images // 查看本地镜像
// 创建(类似安装系统)
docker run -it -p 8080:8080 ubuntu /bin/bash // -it表示打开并保持stdout,并分配一个终端(pseudo-tty)
docker run -d -p 80:80 --name [myname] nginx
// 退出
exit // 容器关闭,状态为:Exit
快捷键 ctrl+p ctrl+q // 后台运行,状态为:Up
docker ps -a // 查看状态
// 操作容器
docker start CONTAINERID // 启动
docker stop CONTAINERID // 停止
docker restart CONTAINERID // 重启
docker attach CONTAINERID // 进入
docker exec -it CONTAINERID /bin/bash // 进入(如创建时未it)
// 提交镜像到本地仓库
docker commit -m "msg" -a "Author" CONTAINERID 用户名/仓库名:tag
// 删除镜像
docker rm CONTAINERID // 必须先删除所有容器
docker rmi IMAGESID // 接着删除镜像
// 提交镜像到hub
docker push 用户名/仓库名:tag
// 清除未使用的镜像
docker image prune -f
docker system prune -f
# Dockerfile常用参数
FROM // 指定构建镜像的基础源镜像
MAINTAINER // 维护者的信息
RUN // 在当前镜像基础上执行指定命令
CMD // 启动容器时提供一个默认的命令执行选项
EXPOSE // 服务端容器对外映射的本地端口
ENV // 指定一个环节变量,会被后续RUN指令使用,并在容器运行时保留
ADD // 复制本地主机文件、目录或者远程文件URLS从并且添加到容器指定路径中,支持正则模糊匹配
COPY // 复制新文件或者目录从并且添加到容器指定路径中
VOLUME // 创建一个可以从本地主机或其他容器挂载的挂载点
WORKDIR // 为后续的RUN、CMD、ENTRYPOINT指令配置工作目录。可以使 用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指 定的路径
// 构建镜像
docker build -t name 目录 // 当前目录用`.`表示
# WSL相关问题
打开PowerShell
,运行:
ubuntu config --default-user root // 默认root登录
// 进入ubuntu系统,设置默认连接windows的守护进程
vi ~/.bashrc // 打开
export DOCKER_HOST=tcp://127.0.0.1:2375 // 最后一行添加
source ~/.bashrc // 运行下
# docker-compose.yml常用参数
version: "3"
services:
web: # 自定义服务名叫web
image: username/repo:tag
deploy:
replicas: 5 # 运行5个实例作为一个服务
resources:
limits:
cpus: "0.1" # 每个实例最多使用10%CPU
memory: 50M # 每个实例最多使用50MB的RAM
restart_policy:
condition: on-failure # 如果容器出错,立即重启
ports:
- "4000:80"
networks:
- webnet # 负载平衡网络
networks:
webnet:
# Swarm 常用命令
// 基本
docker swarm init // 初始化swarm
docker stack deploy -c docker-compose.yml name // 部署新堆栈或更新现有堆栈
docker stack ls // 列出现有堆栈
docker service ls // 查看服务
docker service ps name // 查看实例
docker container ls -q // 查看所有容器id
docker stack rm name // 退出程序
docker swarm leave --force // 退出swarm
systemctl restart docker // 重启swarm
# 使用阿里云镜像库
# 登陆
docker login --username=master@bingblue.com registry.cn-shanghai.aliyuncs.com
# 提交
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/bingblue/[镜像名]:[镜像版本号]
docker push registry.cn-shanghai.aliyuncs.com/bingblue/[镜像名]:[镜像版本号]
# Docker images 版本区分
alpine
: linux发行版,只有5M,几乎无软件仓库支持stretch
: Debian 9 的代号,2017年发行jessie
: Debian 8 的代号,2015年发行wheezy
: Debian 7 的代号,2013年发行slim
: 瘦身版,比如xxx-jessie-slim
就是基于jessie
的瘦身版perl
: nginx支持perl模块的版本mainline
: nginx目前主力在做的版本,可以说是开发版stable
: 稳定版chakracore
: 基于Edge浏览器的ChakraCore
引擎的node版本
总结:推荐使用alpine
,其次推荐slim
# 实战:项目部署
# 一、编写docker-compose.yml文件
version: '3.6'
services:
# nginx 略...
# mysql 略...
# xbjh_admin 略...
# xbjh 略...
networks:
bingblue:
driver: overlay
ipam:
driver: default
config:
- subnet: 10.88.0.0/16
然后上传到服务器,目录/root/yml/docker-compose.yml
# 二、部署
# 初始化Swarm集群
docker swarm init --advertise-addr [IP地址]
# 创建目录
mkdir nginx // 并在此目录下上传Nginx配置文件 default.conf
mkdir mysql
mkdir xbjh_admin
mkdir xbjh_admin/file
mkdir xbjh_admin/log
# 登陆阿里云私有库账号
docker login --username=master@bingblue.com registry.cn-shanghai.aliyuncs.com
# 进入yml目录
cd /root/yml
# 部署新堆栈或更新现有堆栈
docker stack deploy -c docker-compose.yml [堆栈名称] --with-registry-auth
# 三、项目更新
# 修改docker-compose.yml并上传
cd /root/yml
# 更新现有堆栈
docker stack deploy -c docker-compose.yml xbjh --with-registry-auth
# 单独重启某个Service
docker service update --force [Service ID]
# 四、注意事项
- ✅ 记得阿里云配置安全组入方向规则
- ✅ 配置HTTPS和CDN时要设置:
协议跟随回源