安装
curl -fsSL https://get.docker.com | bash -s docker
systemctl enable docker
docker version && docker compose version
docker常用命令
1.容器生命周期管理:
docker create: 创建一个容器但不启动它。
docker start: 启动一个容器。
docker stop: 停止一个运行中的容器。
docker restart: 重启一个容器。
docker pause: 暂停一个运行中的容器。
docker unpause: 恢复一个暂停的容器。
docker rm: 删除一个容器。
docker kill: 强制停止一个容器。
docker exec: 在运行中的容器中执行命令。
# docker exec nginx ls -alt /etc/nginx/ 一次性命令
# docker exec -it nginx bash #命令交互
# 后面跟容器名或者容器id
2.容器操作和信息查看:
docker ps: 查看当前正在运行的容器。
docker ps -a: 查看所有容器(包括停止的)。
docker inspect: 显示容器的详细信息。
docker logs: 查看容器的日志。
docker top: 查看容器中运行的进程。
docker stats: 查看容器的资源使用情况。
3.镜像管理:
docker images: 列出本地的镜像。
docker pull: 从仓库拉取一个镜像。
docker push: 将一个镜像推送到仓库。
docker rmi: 删除一个镜像。
4.容器网络:
docker network ls: 列出 Docker 网络。
docker network inspect: 显示 Docker 网络的详细信息。
5.数据卷:
docker volume ls: 列出 Docker 数据卷。
docker volume create: 创建一个数据卷。
docker volume rm: 删除一个数据卷。
6.Docker Compose:
docker-compose up: 使用 docker-compose.yml 启动服务。
docker-compose down: 停止并删除 Docker Compose 服务。
docker-compose build: 构建 Docker Compose 服务。
以下是 Docker 运行容器时常用的参数:
1. 命名相关
--name <容器名>: 指定容器的名称。
-h, --hostname <主机名>: 设置容器的主机名。
资源限制和分配:
docker run --name my_container -h my_host nginx
2. 资源限制和分配:
-m, --memory <内存大小>: 限制容器可用的内存量。
# b 字节
# k 千字节
# m 兆字节
# g 吉字节
# 以上不分大小写
docker run -m 512M nginx
--memory-swap <内存+交换空间大小>: 设置容器可使用的内存+交换空间的总大小。
# 实际内存限制为 512MB,交换空间为 512MB
docker run -m 512M --memory-swap 1G nginx
-c, --cpu-shares
# CPU 使用权重设置为 512
docker run -c 512 --name web_server nginx
# 关键服务:--cpu-shares 1024(默认权重,或更高)
# 次要服务:--cpu-shares 512 或更低
# 需要注意的是,--cpu-shares 参数的取值范围是 2 到 1024,其中 1024 表示与默认权重相同,而 2 表示最低的权重。
--cpu-period <CPU周期> 和 --cpu-quota <CPU配额>: 限制容器的 CPU 使用。
--cpuset-cpus <CPU核心列表>: 绑定容器的 CPU 核心。
# 这个命令会创建一个 nginx 容器,并将其绑定到第一和第三核心上运行。CPU 核心编号从 0 开始计数,因此第一个核心的编号是 0,第二个核心是 1,以此类推。
docker run --cpuset-cpus="0,2" nginx
3. 网络相关:
-p, --publish <主机端口:容器端口>: 将容器的端口映射到主机的指定端口。
# 宿主机在前,容器在后
docker run -p 8080:80 nginx
--network <网络模式>: 指定容器的网络模式,如 bridge、host、none、macvlan 等。
# bridge
在 bridge 模式下,容器连接到 Docker 守护程序管理的虚拟网络桥接接口上。容器之间可以通过网络进行通信,也可以通过主机进行通信,但默认情况下它们被隔离在自己的网络命名空间中。
# host 模式:
在 host 模式下,容器共享主机的网络栈,即与主机共享相同的网络命名空间。这意味着容器可以访问主机上的所有网络服务,而无需端口映射。
# none 模式:
在 none 模式下,容器没有网络接口,即容器内部没有网络连接。这意味着容器内部的进程无法访问网络,除非您显式地将容器连接到其他网络。
# macvlan:
macvlan 允许容器直接连接到宿主机物理网络上,并被分配一个唯一的 MAC 地址,从而实现容器与物理网络的直接通信,而无需经过网络地址转换(NAT)。
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macvlan_net
docker run --network macvlan_net nginx
4. 挂载卷和文件
-v, --volume <主机路径:容器路径>: 将主机的路径挂载到容器中,用于持久化数据。
# 将主机上的 /path/on/host 路径挂载到容器中的 /usr/share/nginx/html 目录
docker run -v /path/on/host:/usr/share/nginx/html nginx
# 还有下列写法
docker run -d --name my_nginx \
-v /path/on/host:/usr/share/nginx/html \
-p 8080:80 \
nginx
# 在大多数情况下,反斜杠 \ 前面不需要空格。反斜杠的作用是续行符,用于将一行命令拆分成多行写,使代码更易读和组织。
--mount type=bind,source=<主机路径>,target=<容器路径>: 使用更灵活的挂载方式。
# --mount type=bind,source=<主机路径>,target=<容器路径> 这个参数组合表示将主机上的指定路径(source)挂载到容器中的指定路径(target)。
docker run -d --name my_nginx \
--mount type=bind,source=/path/on/host,target=/usr/share/nginx/html \
-p 8080:80 \
nginx
5. 环境变量和配置:
-e, --env <环境变量>: 设置容器中的环境变量。
# 设置了一个名为 NGINX_WORKER_PROCESSES 的环境变量,并将其值设置为 2,用于指定 nginx 的 worker 进程数量
docker run -d --name my_nginx \
-e NGINX_WORKER_PROCESSES=2 \
-p 8080:80 \
nginx
--env-file <环境变量文件>: 从文件中读取环境变量。
6. 交互式操作:
-i, --interactive: 以交互模式运行容器。
-t, --tty: 分配一个伪终端。
-it, 正常一起使用, 表示以交互式终端模式运行容器。
后台运行和日志:
-d, --detach: 在后台运行容器。
--log-driver <日志驱动>: 设置容器的日志驱动。
--log-opt <选项>: 设置日志驱动的选项。
其他常用参数:
--restart <策略>: 设置容器退出后的重启策略,如 no、always、on-failure 等。
# no 不重启容器
# always 容器退出时,Docker 将自动重新启动该容器。
# on-failure
docker run -d --name my_container --restart on-failure:5 nginx
# 将尝试最多重新启动容器 5 次
--privileged: 赋予容器完全访问主机的权限。
docker使用国内源
1,
# 以下方法失效
# linux
mkdir /etc/docker/
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
EOF
# mac/windows,设置,Docker Engine
"experimental": false,
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
2,
service docker restart
# debian
# systemctl daemon-reload && systemctl restart docker
# alpine
# rc-service docker reload && rc-service docker restart