一、卸载旧Docker相关
#删除Docker相关源
sudo rm -f /etc/apt/sources.list.d/*docker*.list
#卸载Docker和相关的软件包
for pkg in docker.io docker-buildx-plugin docker-ce-cli docker-ce-rootless-extras docker-compose-plugin docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove -y $pkg; done
二、安装Docker
#更新包管理工具
sudo apt-get update
#添加Docker软件包源
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#安装Docker社区版本
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#验证Docker是否安装成功
sudo docker -v
#启动Docker
sudo systemctl start docker
#开机自启
sudo systemctl enable docker
#查看Docker状态
sudo systemctl --no-pager status --full docker
三、配置Docker
1.创建镜像目录
sudo mkdir -p /docker
2.镜像加速器
3.配置
sudo vi /etc/docker/daemon.json
内容如下
{
"registry-mirrors": [
"阿里云镜像加速器地址"
],
"data-root": "/docker"
}
其他的镜像加速器:
“http://hub-mirror.c.163.com”,“https://registry.docker-cn.com”
重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
四、常用命令
1.镜像相关命令
查看镜像
sudo docker images
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像 ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
搜素镜像
sudo docker search 镜像名称
sudo docker search 镜像名称:标签
#或者从私有仓库搜索
sudo docker search 私有仓库地址/镜像名[:标签]
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
拉取镜像
sudo docker pull 镜像名称
#默认拉取:latest标签的镜像
#拉取指定标签的镜像
sudo docker pull 镜像名称:标签
#从私有仓库拉取
sudo docker pull 私有仓库地址/镜像名[:标签]
删除镜像
sudo docker rmi 镜像ID
sudo docker rmi 镜像名称
更改镜像名
sudo docker tag 原镜像名:标签 新镜像名:标签 && docker rmi 原镜像名:标签
2.容器相关命令
查看容器
#查看正在运行的容器
sudo docker ps
#查看所有容器
sudo docker ps -a
#查看最后一次运行的容器
sudo docker ps -l
创建容器
创建容器命令:docker run
参数 | 说明 |
---|---|
-it | 用于进入容器的交互式 shell。 i:交互模式,表示运行容器。 t:表示容器启动后会进入其命令行,分配伪终端。 加入这两个参数后,容器创建就能登录进去。 |
-id | d:守护式容器,后台运行,创建容器后不会自动登录容器。 -it 和 -id只能二选一。 |
–restart | 重启策略 –restart=always:无论退出状态如何,Docker 都会自动重启容器。 –restart=unless-stopped:除非手动停止,否则 Docker 会自动重启容器(推荐生产环境)。 –restart=on-failure:仅在容器以非零状态码退出时重启。 |
–name | 为容器指定自定义名称。 |
-p | 端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射 |
-v | 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。 注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 |
-e | 环境变量:MY_ENV=value,例如NODE_ENV=development |
(1)交互式方式创建容器:交互式容器创建好后会进入容器
sudo docker run -it --name=容器名称 镜像名称:标签 bash
#退出容器
exit
(2)守护式方式创建容器
sudo docker run -id --name=容器名称 镜像名称:标签
(3)登录守护式容器方式
sudo docker exec -it 容器名称 (或者容器 ID) bash
停止与启动容器
#停止容器
sudo docker stop 容器名称(或者容器 ID)
#启动容器
sudo docker start 容器名称(或者容器 ID)
删除容器
#先停止容器
sudo docker rm -f 容器名(容器ID)
文件拷贝
#将文件拷贝到容器内
sudo docker cp 需要拷贝的文件 容器名称:容器目录/文件名
#将文件从容器内拷贝出来
sudo docker cp 容器名称:容器目录/文件名 拷贝到目录/文件名
目录、文件挂载
在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主
机某个目录的文件从而去影响容器
注意:目录挂载必须在创建容器的时候就挂载,不能后面追加挂载
sudo docker run -id -v 宿主机目录:容器目录 --name=容器名称 镜像名称:镜像标签名
五、安装软件(可选)
私有镜像仓库地址:
毫秒镜像:docker.1ms.run
轩辕镜像:docker.xuanyuan.me
创建docker-compose.yml文件
sudo vi /usr/local/docker-compose.yml
添加以下内容
services:
1.JDK
sudo vi /usr/local/docker-compose.yml
services
添加以下内容
jdk:
# 镜像
image: docker.xuanyuan.me/library/openjdk:17
# 容器名
container_name: jdk
# 保持容器运行
command: tail -f /dev/null
# 重启策略
restart: always
后台启动运行容器
sudo docker compose -f /usr/local/docker-compose.yml up -d
2.MySQL/Oracle
获取Token
要先去官网注册,注册完成登录之后右上角Auth Token
生成,这个要保存好等下需要用到
2.1 MySQL
2.1.1 授权
选择enterprise-server
授权
接受
完成授权
2.1.2 镜像选择
查看架构
uname -m
x86_64
是 amd64。
aarch64
是 arm64。
滑动页面到底部,选择对应的版本架构与之对应的拉取命令。
2.1.3 登录
#登录官网 输入账号,刚才生成token
sudo docker login container-registry.oracle.com
2.1.4 创建容器运行
#开放端口
sudo ufw allow 3306/tcp
sudo ufw reload
sudo vi /usr/local/docker-compose.yml
services
添加以下内容
mysql:
# 镜像
image: container-registry.oracle.com/mysql/enterprise-server:8.0.42
# 容器名
container_name: mysql
# 端口映射
ports:
- "3306:3306"
# 环境配置
environment:
# root用户密码
MYSQL_ROOT_PASSWORD: ${
MYSQL_ROOT_PASSWORD:-123456}
# 字符集设置
MYSQL_CHARSET: utf8mb4
MYSQL_COLLATION: utf8mb4_unicode_ci
# 挂载
volumes:
# 数据目录
- ./mysql/data:/var/lib/mysql
# 配置目录
- ./mysql/conf:/etc/mysql/conf.d
# 日志目录
- ./mysql/logs:/var/log/mysql
# 健康检查
healthcheck:
# 检查命令
test: ["CMD", "mysqladmin", "-p${MYSQL_ROOT_PASSWORD:-123456}", "ping", "-h", "localhost"]
# 检查间隔(默认30s)
interval: 10s
# 超时时间
timeout