docker 容器开机启动(docker容器的启动)

docker 容器开机启动(docker容器的启动)p 1 启动容器 p 示例 1 启动一个复杂的 Web 应用容器 docker run d p 8080 80 v data webapp app e APP ENV production e DB HOST db example com it network my network name

大家好,我是讯享网,很高兴认识大家。



 <p>1.启动容器 </p> 

讯享网

 示例 1:启动一个复杂的 Web 应用容器

docker run -d

  -p 8080:80

  -v /data/webapp:/app

  -e APP_ENV=production

  -e DB_HOST=db.example.com

  -it

  –network my_network

  –name webapp_container

  –restart always

  –memory 1g

  –cpu-shares 512

  –dns 8.8.8.8

  –dns 8.8.4.4

  –dns-search example.com

  –privileged

  –user webuser

  myapp:latest

 详细解释

-d:以后台模式运行容器。这样容器会在后台运行,不会占用当前终端。

-it: 以交互式,终端方式启动容器

-p 8080:80:将主机的 8080 端口映射到容器的 80 端口。这样可以通过主机的 8080 端口访问容器内的 Web 服务。

-v /data/webapp:/app:将主机的 /data/webapp 目录挂载到容器的 /app 目录。这样可以在主机上修改文件,容器内会实时同步。

-e APP_ENV=production:设置环境变量 APP_ENV 为 production。这可以用于配置应用的运行环境。

-e DB_HOST=db.example.com:设置环境变量 DB_HOST 为 db.example.com。这可以用于配置应用连接的数据库地址。

–network my_network:指定容器连接到名为 my_network 的自定义网络。这样容器可以与其他在同一个网络中的容器通信。

–name webapp_container:为容器指定一个名称 webapp_container。这样可以通过这个名称来管理容器。

–restart always:设置容器的重启策略为 always。这意味着即使容器因任何原因停止,Docker 也会自动重启它。

–memory 1g:限制容器使用的最大内存为 1GB。这可以防止容器占用过多内存导致系统不稳定。

–cpu-shares 512:设置容器的 CPU 份额为 512。这可以影响容器在多核系统中的 CPU 调度优先级。

–dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。这可以确保容器能够正确解析域名。

–dns 8.8.4.4:指定容器使用的另一个 DNS 服务器为 8.8.4.4。提供备用 DNS 服务器可以增加解析的可靠性。

–dns-search example.com:指定容器的 DNS 搜索域为 example.com。这样在解析域名时,如果域名不完整,会自动加上 example.com。

–privileged:赋予容器扩展的权限。这可以让容器执行一些特权操作,如访问设备文件等。

–user webuser:设置容器的用户为 webuser。这可以提高安全性,避免以 root 用户运行应用。

myapp:latest:指定要运行的 Docker 镜像及其标签。这里使用的是 myapp 镜像的 latest 版本。

 示例 2:启动一个复杂的数据库容器

docker run -d

  -p 3306:3306

  -v /data/db:/var/lib/mysql

  -e MYSQL_ROOT_PASSWORD=rootpassword

  -e MYSQL_DATABASE=mydb

  –network db_network

  –name db_container

  –restart unless-stopped

  –memory 2g

  –cpu-shares 1024

  –dns 8.8.8.8

  –dns-search example.com

  –privileged

  –user mysql

  mysql:5.7

 详细解释

-d:以后台模式运行容器。

-p 3306:3306:将主机的 3306 端口映射到容器的 3306 端口。这样可以通过主机的 3306 端口访问容器内的 MySQL 数据库。

-v /data/db:/var/lib/mysql:将主机的 /data/db 目录挂载到容器的 /var/lib/mysql 目录。这样可以持久化数据库数据。

-e MYSQL_ROOT_PASSWORD=rootpassword:设置环境变量 MYSQL_ROOT_PASSWORD 为 rootpassword。这是 MySQL 根用户的密码。

-e MYSQL_DATABASE=mydb:设置环境变量 MYSQL_DATABASE 为 mydb。这会在容器启动时创建一个名为 mydb 的数据库。

–network db_network:指定容器连接到名为 db_network 的自定义网络。

–name db_container:为容器指定一个名称 db_container。

–restart unless-stopped:设置容器的重启策略为 unless-stopped。这意味着除非手动停止容器,否则 Docker 会自动重启它。

–memory 2g:限制容器使用的最大内存为 2GB。

–cpu-shares 1024:设置容器的 CPU 份额为 1024。

–dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。

–dns-search example.com:指定容器的 DNS 搜索域为 example.com。

–privileged:赋予容器扩展的权限。

–user mysql:设置容器的用户为 mysql。

mysql:5.7:指定要运行的 Docker 镜像及其标签。这里使用的是 mysql 镜像的 5.7 版本。

 示例 3:启动一个复杂的开发环境容器

docker run -it

  -v /home/user/project:/project

  -e PROJECT_NAME=myproject

  –network dev_network

  –name dev_container

  –memory 2g

  –cpu-shares 512

  –dns 8.8.8.8

  –dns-search example.com

  –privileged

  –user developer

  –entrypoint /bin/bash

  mydevimage:latest

 详细解释

-it:分配一个伪终端并保持打开状态。这样可以在容器内进行交互式操作。

-v /home/user/project:/project:将主机的 /home/user/project 目录挂载到容器的 /project 目录。这样可以在主机上编辑项目文件,容器内会实时同步。

-e PROJECT_NAME=myproject:设置环境变量 PROJECT_NAME 为 myproject。这可以用于配置开发环境。

–network dev_network:指定容器连接到名为 dev_network 的自定义网络。

–name dev_container:为容器指定一个名称 dev_container。

–memory 2g:限制容器使用的最大内存为 2GB。

–cpu-shares 512:设置容器的 CPU 份额为 512。

–dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。

–dns-search example.com:指定容器的 DNS 搜索域为 example.com。

–privileged:赋予容器扩展的权限。


讯享网

–user developer:设置容器的用户为 developer。

–entrypoint /bin/bash:覆盖镜像的默认入口点,使用 /bin/bash 作为入口点。这样可以直接进入容器的 shell。

mydevimage:latest:指定要运行的 Docker 镜像及其标签。这里使用的是 mydevimage 镜像的 latest 版本。

示例4:启动一个超级复杂的 Web 应用容器

docker run -d

  –name webapp_container

  –hostname webapp-host

  –user webuser

  –workdir /app

  –env-file /path/to/env/file

  -e APP_ENV=production

  -e DB_HOST=db.example.com

  -p 8080:80

  -v /data/webapp:/app

  -v /data/logs:/var/log/app

  –network my_network

  –ip 192.168.1.100

  –add-host dbhost:192.168.1.101

  –dns 8.8.8.8

  –dns 8.8.4.4

  –dns-search example.com

  –memory 1g

  –memory-swap 2g

  –cpu-shares 512

  –cpuset-cpus “0-1”

  –cap-add NET_ADMIN

  –device /dev/snd

  –read-only

  –tmpfs /run

  –tmpfs /tmp

  –security-opt apparmor=unconfined

  –label com.example.department=IT

  –label com.example.project=myproject

  –log-driver json-file

  –log-opt max-size=10m

  –log-opt max-file=3

  –restart always

  –stop-timeout 30

  –entrypoint /usr/local/bin/start.sh

  –privileged
  –sysctl net.ipv4.ip_forward=1
  –ulimit nofile=1024:2048

  myapp:latest

详细解释

-d:以后台模式运行容器。这样容器会在后台运行,不会占用当前终端。

–name webapp_container:为容器指定一个名称 webapp_container。这样可以通过这个名称来管理容器。

–hostname webapp-host:设置容器的主机名 webapp-host。这可以在容器内部通过主机名进行识别。

–user webuser:设置容器的用户为 webuser。这可以提高安全性,避免以 root 用户运行应用。

–workdir /app:设置容器的工作目录为 /app。这样在容器内运行命令时,默认路径是 /app。

–env-file /path/to/env/file:从指定的文件中读取环境变量。这可以方便地管理多个环境变量。

-e APP_ENV=production:设置环境变量 APP_ENV 为 production。这可以用于配置应用的运行环境。

-e DB_HOST=db.example.com:设置环境变量 DB_HOST 为 db.example.com。这可以用于配置应用连接的数据库地址。

-p 8080:80:将主机的 8080 端口映射到容器的 80 端口。这样可以通过主机的 8080 端口访问容器内的 Web 服务。

-v /data/webapp:/app:将主机的 /data/webapp 目录挂载到容器的 /app 目录。这样可以在主机上修改文件,容器内会实时同步。

-v /data/logs:/var/log/app:将主机的 /data/logs 目录挂载到容器的 /var/log/app 目录。这样可以持久化应用的日志。

–network my_network:指定容器连接到名为 my_network 的自定义网络。这样容器可以与其他在同一个网络中的容器通信。

–ip 192.168.1.100:为容器指定一个静态 IP 地址 192.168.1.100。这可以确保容器在网络中的地址固定。

–add-host dbhost:192.168.1.101:添加一个自定义的主机条目 dbhost,指向 IP 地址 192.168.1.101。这可以方便地在容器内通过主机名访问其他服务。

–dns 8.8.8.8:指定容器使用的 DNS 服务器为 8.8.8.8。这可以确保容器能够正确解析域名。

–dns 8.8.4.4:指定容器使用的另一个 DNS 服务器为 8.8.4.4。提供备用 DNS 服务器可以增加解析的可靠性。

–dns-search example.com:指定容器的 DNS 搜索域为 example.com。这样在解析域名时,如果域名不完整,会自动加上 example.com。

–memory 1g:限制容器使用的最大内存为 1GB。这可以防止容器占用过多内存导致系统不稳定。

–memory-swap 2g:设置容器的交换内存限制为 2GB。这可以允许容器在内存不足时使用磁盘空间。

–cpu-shares 512:设置容器的 CPU 份额为 512。这可以影响容器在多核系统中的 CPU 调度优先级。

–cpuset-cpus “0-1”:限制容器只能使用 CPU 核心 0 和 1。这可以控制容器的 CPU 使用范围。

–cap-add NET_ADMIN:添加 NET_ADMIN 能力,允许容器进行网络管理操作。

–device /dev/snd:将主机的声卡设备 /dev/snd 挂载到容器中。这可以允许容器使用音频设备。

–read-only:将容器的根文件系统设置为只读。这可以提高容器的安全性。

–tmpfs /run:将 /run 目录挂载为临时文件系统。这样可以确保该目录的数据不会持久化。

–tmpfs /tmp:将 /tmp 目录挂载为临时文件系统。这样可以确保该目录的数据不会持久化。

–security-opt apparmor=unconfined:禁用 AppArmor 安全策略。这可以允许容器不受 AppArmor 的限制。

–label com.example.department=IT:为容器添加一个标签 com.example.department=IT。这可以用于管理和分类容器。

–label com.example.project=myproject:为容器添加一个标签 com.example.project=myproject。这可以用于管理和分类容器。

–log-driver json-file:设置容器的日志驱动为 json-file。这可以控制容器日志的格式和存储方式。

–log-opt max-size=10m:设置容器日志的最大大小为 10MB。这可以防止日志文件过大。

–log-opt max-file=3:设置容器日志文件的最大数量为 3 个。这可以防止日志文件过多。

–restart always:设置容器的重启策略为 always。这意味着即使容器因任何原因停止,Docker 也会自动重启它。

–stop-timeout 30:设置容器停止的超时时间为 30 秒。这可以确保容器有足够的时间优雅地停止。

–entrypoint /usr/local/bin/start.sh:覆盖镜像的默认入口点,使用 /usr/local/bin/start.sh 作为入口点。这样可以指定启动脚本。

–privileged:赋予容器扩展的权限。这可以让容器执行一些特权操作,如访问设备文件等。
–sysctl net.ipv4.ip_forward=1:设置容器的内核参数 net.ipv4.ip_forward 为 1。这可以启用 IP 转发,允许容器进行网络路由。
–ulimit nofile=1024:2048:设置容器的文件描述符限制。nofile=1024:2048 表示软限制为 1024,硬限制为 2048。这可以控制容器可以打开的文件描述符数量。

myapp:latest:指定要运行的 Docker 镜像及其标签。这里使用的是 myapp 镜像的 latest 版本。

进入容器后退出容器不停止

ctrl +p+q

exit 退出并停止容器

示例5:启动一个一次性容器,退出后立即删除,用户测试

docker run –rm alpine cat/etc/issue

启动alpine容器 并查看里面的 /etc/issue的信息

示例6:启动一个开机自动运行的容器

docker run -d –name nginx –restart=always -p 80:80 nginx

启动nginx镜像的容器并命名为nginx -d 后台运行 —-restart=always 开机自动运行

-p 80:80将主机的 80端口映射到容器的 80 端口(前面80是主机的)

其他参数

–privileged 容器获得真正root权限,甚至可以容器内在启动docker

–sysctl 修改容器内核参数

–ulimit 指定ulimit参数

小讯
上一篇 2025-05-09 08:36
下一篇 2025-04-24 09:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/139373.html