docker基础知识


安装

# 科学环境
bash <(curl -sL https://ido.moe/sh/docker.sh)
# 没科学环境
bash <(curl -sL https://ido.moe/sh/docker-cn.sh)

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 使用权重。

# 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

dockerfile,待续

docker compose,待续

声明:渣渣的学习日记|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - docker基础知识


Carpe Diem and Do what I like