基础知识#
约 982 个字 152 行代码 7 张图片 预计阅读时间 25 分钟
安装Docker#
Centos安装配置#
- 先卸载之前残留的docker包
Bash
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装
yum-utils
软件包(提供yum-config-manager
工具),并设置仓库。
Bash
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker
Bash
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 启动docker
Windows安装#
- 下载Docker Desktop安装包
- 双击 Docker Desktop Installer.exe 运行安装程序。默认情况下,Docker Desktop 安装在 C:\Program Files\Docker\Docker。
- 根据您的后端选择,在配置页面上提示时,确保选择或不选择
使用 WSL 2 而非 Hyper-V
选项。如果您的系统仅支持这两个选项之一,您将无法选择使用哪个后端。 - 请按照安装向导中的说明授权安装程序并继续安装。
- 安装成功后,选择“关闭”以完成安装过程。
Docker基本操作#
镜像加速#
Danger
国内docker加速镜像源目前都已陆续关闭。
阿里云docker镜像加速:
查看Docker基本信息#
查看Docker基本信息,比如镜像源。
镜像基本操作#
images-查看所有本地镜像#
pull-远程拉取镜像#
rmi-删除本地镜像#
load-加载镜像文件#
save-保存本地镜像为文件#
build-构建镜像#
build命令根据Dockerfile文件构建镜像。
容器基本操作#
ps-查看所有容器#
run-创建并启动容器#
Note
即使镜像不存在,执行docker run
会自动先去下载镜像
stop-停止容器#
start-启动已有容器#
logs-观察容器日志#
inspect-查看容器详情#
exec-进入容器内部#
Bash
# 进入容器内部
# -i:interactive,保持标准输入打开,即使未连接
# -t: tty,分配一个伪终端
# bash: 指定shell种类
docker exec -it mysql bash
rm-删除容器#
目录挂载#
数据卷(volume)
是一个虚拟目录,是容器内目录
与宿主机目录
之间映射的桥梁
数据卷挂载#
挂载行为必须在创建容器时进行。
Note
创建容器时如果不显示挂载数据卷,容器会自动挂载匿名卷
本地目录挂载#
直接挂载到数据卷
,数据卷的位置不是很好记,维护不方便。
我们可以直接将容器中的目录挂载到本地目录
。
Bash
# 挂载本地目录
docker run -d \
--name nginx \
-p 80:80 \
-v /usr/share/nginx/html:/usr/share/nginx/html \
nginx
本地挂载和数据卷挂载区别
-v 本地目录:容器内目录
本地目录必须以/
或者./
开头。如果直接以名称开头会被认为是数据卷
。
查看所有数据卷#
查看数据卷详情#
删除指定数据卷#
清理未使用的数据卷#
容器网络#
虽然容器之间可以相互访问,但是每次启动容器时分配的ip是会变化的,因此不建议容器之间通过默认网段访问。
查看所有网络#
创建网络#
链接容器到指定网络#
也可以在创建容器时指定网络:
Note
默认网络名为bridge
,容器之间需要通过ip地址访问,ip地址可能会发生变化。
通过自定义网络,容器间可以通过容器名称
进行访问。
Dockerfile-打包镜像#
常用指令#
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可以在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像指定目录 | COPY ./jrell.tar.gz /tmp |
RUN | 执行linux指令,用于创建容器时安装的命令 | RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path |
EXPOSE | 指定容器运行时监听的端口,给镜像使用者看 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xxx.jar |
Docker Compose#
Docker Compose通过docker-compose.yml
文件来定义一组相关联的应用容器,帮助我们实现多个互相关联的Docker容器的快速部署
。
DockerCompose参数与docker run 参数对比#
DockerCompose示例#
YAML
version: "3.8"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/data:/var/lib/mysql"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- hm-net
hmall:
build:
context: .
dockerfile: Dockerfile
container_name: hmall
ports:
- "8080:8080"
networks:
- hm-net
depends_on:
- mysql
nginx:
image: nginx
container_name: nginx
ports:
- "18080:18080"
- "18081:18081"
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
- "./nginx/html:/usr/share/nginx/html"
depends_on:
- hmall
networks:
- hm-net
networks:
hm-net:
name: hmall
通过docker compose 命令启动容器:
Bash
# 启动容器
# -f: 指定docker-compose.yml文件
# -d: 后台运行
docker-compose up \
-f xxx.yml \
-d
# 停止并移除容器、自定义网络
# -f: 指定docker-compose.yml文件
# -p: 指定容器名称
docker-compose down