提示 | 文中的参数基本都是简写
在docker-compose部署方式上需要写完整的
详细的可以看后面的部署模板
|
基础:创建一个新的容器并运行一个命令 | docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#演示
使用nginx:latest镜像创建并运行一个名为mynginx的容器
docker run --name mynginx nginx:latest
|
-d: 后台运行容器,并返回容器ID | #使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run -d --name mynginx nginx:latest
|
--name: 为容器指定一个名称为创建的容器设置一个名称 名称可以自己设置 格式为:--name XXX
| docker run -d --name mynginx nginx:latest
#说明
docker run:启动一个容器。
-d:后台模式运行容器
--name:设置容器名称为mynginx
nginx:latest:镜像来源:nginx:latest
|
-i: 以交互模式运行容器 | docker run -i nginx:latest /bin/bash
#说明:
docker run:启动一个容器。
-i:以交互模式启动(进入容器中)
nginx:latest:镜像来源:nginx:latest
/bin/bash:进入容器后要执行的命令,这里是打开终端。
root@b8573233d675:/# :已经进入了容器里面的终端,用户名变化。
|
-t: 以交互模式(伪终端)运行容器 | docker run -it nginx:latest /bin/bash
#说明:
docker run:启动一个容器。
-it:以交互模式启动(进入容器中)
nginx:latest:镜像来源:nginx:latest
/bin/bash:进入容器后要执行的命令,这里是打开终端。
root@b8573233d675:/# :已经进入了容器里面的终端,用户名变化。
|
@小知识 | docker run -p 80:80 -p 90:90 -v /data:/data -d nginx:latest
#例如此条,有两个端口需要映射就添加两条-p端口映射参数
|
-p: 指定端口映射 | docker run -d --name mynginx -p 8080:80 nginx:latest
#说明:
docker run:启动一个容器。
-d:以后台模式启动。
--name mynginx:将容器命名为mynginx。
-p 8080:80:将容器的 80 端口映射到主机的 8080 端口
nginx:latest:镜像来源:nginx:latest
|
--dns: 容器使用指定的DNS服务器IP | docker run -d --name mynginx -p 8080:80 --dns 8.8.8.8 nginx:latest
#说明:
docker run:启动一个容器。
-d:以后台模式启动。
--name mynginx:将容器命名为mynginx。
-p 8080:80:将容器的 80 端口映射到主机的 8080 端口
--dns 8.8.8.8:设置容器使用指定的8.8.8.8DNS服务器IP
nginx:latest:镜像来源:nginx:latest
|
--rm:容器退出时自动删除容器 | docker run -it --rm ubuntu:14.04 bash
#说明:
docker run:启动一个容器。
-it:以交互式模式运行容器,进入容器终端界面。
--rm:设置此容器退出时自动删除此容器
ubuntu:14.04:镜像来源:ubuntu:14.04
bash:交互式Shell页面
|
-v:将主机的目录/文件挂载到容器中 | docker run --name mynginx -p 8080:80 -v /volume1/data:/data -d nginx:latest、
#说明:
docker run:启动一个容器。
--name mynginx:将容器命名为mynginx。
-p 8080:80:将容器的 80 端口映射到主机的 8080 端口
-v /volume1/data:/data:将主机的目录 /volume1/data 映射到容器的 /data上
-d:以后台模式启动。
nginx:latest:镜像来源:nginx:latest
|
-e:设置容器环境变量设置容器的环境变量 可以自定义修改容器的环境变量参数 不同的环境变量需要参考容器所需参数
| docker run --name mysql \
-p 3306:3306 \
-v $HOME/mysql/conf.d:/etc/mysql/conf.d \
-v $HOME/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.23
#说明
-e MYSQL_ROOT_PASSWORD=123456 \这条参数的设置就是将MySQL数据库的密码设置为123456,此密码可以自己修改。
|
--env-file:从指定文件读取环境变量 | docker run -tid --env PATH=/volume1/docker/mysql/bin:$PATH --rm mysql:8.0
#说明
映射目录/volume1/docker/mysql/bin内的.env配置文件到容器
|
--link:连接到其他容器 | docker run -itd --name nginx01 --link tomcat01 nginx
#说明
以nginx镜像后台运行启动并进入交互式界面,创建nginx01容器,并与tomcat01容器连接,使其互相通信。
|
--privileged:以特权模式运行容器 | docker run --privileged=true -it ubuntu
#说明
赋予ubuntu容器特权模式运行
|
--device:为容器添加指定访问权限 | docker run --device=/dev/sda:/dev/xvdc -it ubuntu
或者
docker run --cap-add=NET_ADMIN -it ubuntu
|
--restart:重启策略为了保证容器运行时健壮性(自愈),Docker 提供了容器重启策略,即使用参数 --restart,它可以让容器在退出时自动尝试重启。 no:默认策略,在容器退出时不重启容器。启动容器时不添加参数 --restart 即可。 on-failure:在容器非正常退出时(退出状态非0),才会重启容器。 on-failure:n:在容器非正常退出时重启容器,并且指定重启次数。n 为正整数。如果不指定次数,则会一直重启。 例如:on-failure:3 always:容器退出时总是重启。 unless-stopped:在容器退出时总是重启容器,但是 Docker 守护进程启动之前就已经停止运行的容器不算在内。
| docker run -itd \
--name webos \
--restart=always \
-p 8088:8088 \
-v /:/webosMnt \
-v /volume1/docker/webos/rootPath:/webos/api/rootPath \
-v /volume1/docker/webos/apps:/webos/web/apps \
fs185085781/webos
#说明
设置容器重启为always,只要容器退出了就自动重启。
docker container update --restart=always [容器名/容器id]
#说明
将重启策略更新到指定的容器中
|
-c:限制容器对CPU的使用-c 或 --cpu-shares -c:CPU权重 --cpu:CPU核数 -cpus: 限制容器运行的核数;从docker1.13版本之后,docker提供了--cpus参数可以限定容器能使用的CPU核数。这个功能可以让我们更精确地设置容器CPU使用量,是一种更容易理解也常用的手段。 --cpuset-cpus: 限制容器运行在指定的CPU核心; 运行容器运行在哪个CPU核心上,例如主机有4个CPU核心,CPU核心标识为0-3,我启动一台容器,只想让这台容器运行在标识0和3的两个CPU核心上,可以使用cpuset来指定。
| # containerA的cpu share 1024, 是containerB 的两倍。
# 当两个容器都需要CPU资源时,containerA可以得到的CPU是containerB 的两倍。
# 需要特别注意的是,这种按权重分配CPU只会发生在CPU资源紧张的情况下。
# 如果containerA处于空闲状态,这时,为了充分利用CPU资源,containerB 也可以分配到全部可用的CPU。
docker run --name "cont_A" -c 1024 ubuntu docker run --name "cont_B" -c 512 ubuntu
# 容器最多可以使用主机上两个CPU ,除此之外,还可以指定如 1.5 之类的小数。
docker run -it --rm --cpus=2 centos /bin/bash
# 表示容器中的进程可以在 CPU-1 和 CPU-3 上执行。
docker run -it --cpuset-cpus="1,3" ubuntu:14.04 /bin/bash
# 表示容器中的进程可以在 CPU-0、CPU-1 及 CPU-2 上执行。
docker run -it --cpuset-cpus="0-2" ubuntu:14.04 /bin/bash
|
-m:限制容器对内存的使用-m 或 --memory:设置内存的使用限额,例如:100MB,2GB。 --memory-swap:设置内存+swap的使用限额。 默认情况下,上面两组参数为-1,即对容器内存和swap的使用没有限制。如果在启动容器时,只指定-m而不指定--memory-swap, 那么--memory-swap默认为-m的两倍。
| # 允许该容器最多使用200MB的内存和100MB 的swap。
docker run -m 200M --memory-swap=300M ubuntu
# 容器最多使用200M的内存和200M的Swap
docker run -it -m 200M ubuntu
|
--hostname:更改容器内的主机名在计算机中,hostname是指设备或机器的名称。在 docker 容器中,它也是一个标识符,用于标识容器。默认情况下,docker 容器的 hostname 是随机分配的,但是可以通过修改其值来自定义 hostname。 --hostname 标志只会更改容器内的主机名。如果你的应用程序需要主机名的特定值,则可能需要这样做。它不会更改 docker 之外的 DNS,也不会更改网络隔离,因此它不会允许其他人使用该名称连接到容器。 可以使用容器名称或容器的(短,12 个字符)id 使用 docker 的嵌入式 dns 从容器连接到容器,只要您在同一网络上拥有两个容器并且该网络不是默认网桥。
| docker run --hostname test --ip 10.1.2.3 ubuntu:14.04
#说明
创建一个 docker 容器,其基本映像为 ubuntu-14.04,主机名为 test,容器 ip 地址为 10.1.2.3
|
--add-host:为容器增加 host 指向 | sudo docker run -d --name=Jellyfin -p 8096:8096 \ # --name=Jellyfin 将容器名定义为 Jellyfin
-p 8920:8920 -p 7359:7359/udp -p 1900:1900/udp #这三个端口为可选项 \
-v /srv/jellyfin/config:/config -v /srv/jellyfin/cache:/cache -v /media:/media \
-e TZ=Asia/Shanghai -e PUID=0 -e PGID=0 \ #将容器的时区设为上海,使用窗口在运行时使用root权限
--device=/dev/dri:/dev/dri \ #直通显卡给 Docker 容器,用于硬解
--add-host=api.themoviedb.org:13.224.161.90 \ #为容器增加 host 指向,加速海报与影视元数据的搜刮
--add-host=api.themoviedb.org:13.35.8.65 \
--restart unless-stopped \
jellyfin/jellyfin:latest
|
--network:指定容器使用的网络类型 |
|
bridge:为每个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,默认为该模式。 (解释:最常用的是可以手动设置容器对外的端口,比如需要访问容器内的88端口,可以将容器内部88端口映射到宿主机的任意空闲端口上。) host:容器不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 (解释:例如容器内部对外使用的88端口会自动映射到宿主机88端口上,如果宿主机88端口是被占用的,那么容器就会启动失败。) none:容器独有的Network namespace,但没有对其进行任何网络设置,如分配veth pair和网桥连接、IP等。 container:新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。
|