Docker——容器生命周期管理(下篇)

这篇具有很好参考价值的文章主要介绍了Docker——容器生命周期管理(下篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、run

​创建一个新的容器并运行一个命令

语法格式
	docker run [OPTIONS] IMAGE [COMMAND][ARG...]
备注:
  其实跟docker create一样的语法格式,只不过可以运行容器甚至进入容器内部
	COMMAND: 需要在容器内执行的命令
docker run执行流程
  首先在指定镜像上创建一个可写的容器层
  然后使用指定的命令(command)启动它
  docker run 相当于执行力两个API /containers/create 、 ../start

1、options说明

OPtion 作用
-i 以交互模式运行,通常与-t同时使用
-t 启动容器后,为容器分配一个命令行,通常与-i同时使用
-v 目录映射,容器目录挂载到宿主机目录,格式<host目录><容器目录>
-d 守护进程,后台运行该容器
-p 指定端口映射,格式: 主机(宿主)端口:容器端口
-P 随机端口映射,容器内部端口随机映射到主机的端口
-u 以什么用户身份创建容器
–name “nginx-lb” 容器名字
-m, --memory bytes 设置容器使用内存最大值
-h, --hostname string 指定容器的host name
–dns 8.8.8.8 指定容器 dns 服务器
-e username=“ritchie” 设置环境变量
–restart Docker 重启后,容器是否自动重启
–privileged 容器内是否使用真正的 root 权限

2、-p的三种写法

docker run -p ip:主机端口:容器端口
docker run -p 主机端口:容器端口(常用)
docker run -p 容器端口

3、实例1

使用镜像 tomcat:7 容器命名为tomcat7

[root@localhost Fancy_Illusion]# docker run --name tomcat7 tomcat:7
Unable to find image 'tomcat:7' locally
7: Pulling from library/tomcat
0bc3020d05f1: Pull complete 
a110e5871660: Pull complete 
83d3c0fa203a: Pull complete 
a8fd09c11b02: Pull complete 
96ebf1506065: Pull complete 
26b72ffca293: Pull complete 
0bffa2ea17aa: Pull complete 
d880cebcc7a6: Pull complete 
d19ab8039b36: Pull complete 
5057492dc495: Pull complete 
Digest: sha256:f7d37d248d0eacec1e5995736234c9c22155626fcb27ea3ead13b9db24e698f7
Status: Downloaded newer image for tomcat:7
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name:   Apache Tomcat/7.0.109
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Apr 22 2021 18:43:38 UTC
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version number: 7.0.109.0
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Linux
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            3.10.0-1160.el7.x86_64
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             /usr/local/openjdk-8/jre
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_292-b10
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         /usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         /usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dignore.endorsed.dirs=
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/usr/local/tomcat
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: Loaded Apache Tomcat Native library [1.2.28] using APR version [1.6.5].
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized [OpenSSL 1.1.1d  10 Sep 2019]
Sep 13, 2022 6:58:49 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 667 ms
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service [Catalina]
Sep 13, 2022 6:58:49 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.109
Sep 13, 2022 6:58:49 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-apr-8080"]
Sep 13, 2022 6:58:49 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 65 ms

Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器
Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器

这样运行,会直接将容器运行日志打印出来,所以一般都需要加 -d,否则无法继续敲其他命令

[root@localhost Fancy_Illusion]# docker run -d  --name tomcat8 tomcat:8
Unable to find image 'tomcat:8' locally
8: Pulling from library/tomcat
0e29546d541c: Pull complete 
9b829c73b52b: Pull complete 
cb5b7ae36172: Pull complete 
6494e4811622: Pull complete 
668f6fcc5fa5: Pull complete 
dc120c3e0290: Pull complete 
8f7c0eebb7b1: Pull complete 
77b694f83996: Pull complete 
b7c26350ecc2: Pull complete 
7365b3b02e1b: Pull complete 
Digest: sha256:421c2a2c73f3e339c787beaacde0f7bbc30bba957ec653d41a77d08144c6a028
Status: Downloaded newer image for tomcat:8
dadbab601c2d02a6cd04abf186675ff9c85fc3f8b0989b0391dbd2786dfb367e
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID   IMAGE      COMMAND             CREATED              STATUS              PORTS      NAMES
dadbab601c2d   tomcat:8   "catalina.sh run"   About a minute ago   Up About a minute   8080/tcp   tomcat8

Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器
其实打印的在日志就是 catalina.sh run 命令之后的日志

4、实例2

使用镜像tomcat:8,以后台模式启动一个容器,容器名字定义为tomcat8

[root@localhost Fancy_Illusion]# docker run -d  --name tomcat8 tomcat:8
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID   IMAGE      COMMAND             CREATED              STATUS              PORTS      NAMES
dadbab601c2d   tomcat:8   "catalina.sh run"   About a minute ago   Up About a minute   8080/tcp   tomcat8

Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器
创建容器之后还能执行其他命令,这样方便很多

5、实例3

使用镜像tomcat:9,以后台模式启动一个容器,将容器的8080端口映射到主机的随机端口,容器名字定义为tomcat9999

[root@localhost Fancy_Illusion]# docker run -d -P --name tomcat9999 tomcat:9
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID   IMAGE      COMMAND             CREATED          STATUS          PORTS                                         NAMES
685cb359e8f5   tomcat:9   "catalina.sh run"   34 seconds ago   Up 33 seconds   0.0.0.0:49153->8080/tcp, :::49153->8080/tcp   tomcat9999

Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器

6、实例4

使用镜像 tomcat:10 ,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 9999 端口,容器名字自定义为 tomcat10

[root@localhost Fancy_Illusion]# docker run -d -p 9999:8080 --name tomcat10 tomcat:10
[root@localhost Fancy_Illusion]# docker ps
21ba2a865991   tomcat:10   "catalina.sh run"   47 seconds ago   Up 45 seconds   0.0.0.0:9999->8080/tcp, :::9999->8080/tcp     tomcat10

Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器
可以看到 PORTS 一列,主机的 9999 端口指向了容器的 8888 端口

7、实例5

使用镜像 tomcat:7,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 9999 端口,容器名字自定义为 tomcat7,主机的目录 /usr/local/tomcat/webapps 映射到容器的 /usr/local/tomcat/webapps,以后直接在主机的 webapps 目录上传 war 包,就能在浏览器访问对应的项目。

[root@localhost Fancy_Illusion]# docker run -d -p 9999:8080 -i --name tomcat7 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat:7
a603e1e6d14d   tomcat:7   "catalina.sh run"   38 seconds ago   Up 37 seconds   0.0.0.0:9999->8080/tcp, :::9999->8080/tcp   tomcat7

8、实例6

使用镜像 tomcat:7,以后台模式启动一个容器,将容器的 8080 端口映射到主机的 111.20.72.43:8888 端口,容器名字自定义为 tomcat77,主机的目录 /usr/local/tomcat/webapp 映射到容器 /usr/local/tomcat/webapps ,启动容器后,在容器内执行 bash 命令

注意: 这里不加 -it 的话,容器是无法再启动的,加上才能启动容器并执行 bash 命令

docker run -d -p 111.20.72.43:8888:8080 -v /usr/local/webapps:/usr/local/webapps -it --name tomcat77 tomcat:7 bash

9、实例7

[root@localhost Fancy_Illusion]# docker run -d --name jenkin2 --privileged=true jenkins/jenkins
[root@localhost Fancy_Illusion]# docker exec -it jenkin2 bash
jenkins@49ea055c07c1:/$ 

Docker——容器生命周期管理(下篇),Docker,MySQL,Linux,docker,容器,运维,网络,mysql,数据库,服务器
虽然是拥有了 root 权限,但并不一定是 root 用户身份,所以最好加 -uroot 指定 root 用户身份

  • -uroot:是给了 root 用户身份,但并没有真正的 root 权限
  • –privileged:真正让当前用户有了 root 权限

若想要最高的权限,两者可以结合使用

8、实例8

该容器在 Docker 重启后会自动启动无需手动启动

[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                 NAMES
afb882148e5e   jenkins/jenkins   "/sbin/tini -- /usr/…"   16 seconds ago   Up 15 seconds   8080/tcp, 50000/tcp   jenkins
[root@localhost Fancy_Illusion]# systemctl restart docker
[root@localhost Fancy_Illusion]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED              STATUS         PORTS                 NAMES
afb882148e5e   jenkins/jenkins   "/sbin/tini -- /usr/…"   About a minute ago   Up 4 seconds   8080/tcp, 50000/tcp   jenkins

9、退出容器

exit	容器直接退出
ctrl +P +Q 容器不停止退出	

二、start/stop/restart

docker start:启动一个或多个已经被停止的容器
docker stop:停止一个或多个运行中的容器
docker restart:重启一个或多个容器

1、语法格式

docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]

2、stop/restart 命令的 options

option 作用
-t,–time 杀死容器之前等待停止的秒数(默认为10)

根据容器 ID 启动、关闭、重启

[root@localhost Fancy_Illusion]# docker start afb882148e5e
afb882148e5e
[root@localhost Fancy_Illusion]# docker stop afb882148e5e
afb882148e5e
[root@localhost Fancy_Illusion]# docker restart afb882148e5e
afb882148e5e

根据容器名字启动、关闭、重启

[root@localhost Fancy_Illusion]# docker start jenkins
jenkins
[root@localhost Fancy_Illusion]# docker stop jenkins
jenkins
[root@localhost Fancy_Illusion]# docker restart jenkins
jenkins

启动所有容器

[root@localhost Fancy_Illusion]# docker start $(docker ps -a -q)

关闭所有容器

[root@localhost Fancy_Illusion]# docker stop $(docker ps -a -q)

三、kill

杀死一个或多个正在运行的容器

语法格式
docker kill [OPTIONS] CONTAINER [CONTAINER...]

1、重点

	docker kill子命令可杀死一个或多个容器
	向容器内部的主进程发送SIGKILL 信号(默认),或使用 --signal选项指定的信号

2、说明

options 作用
-s 发送到什么信号到容器,默认KILL

3、实例

根据容器名字杀掉容器

[root@localhost Fancy_Illusion]# docker kill jenkins

根据容器ID杀掉容器

[root@localhost Fancy_Illusion]# docker kill afb882148e5e

四、rm

删除一个或多个容器

语法格式
docker rm [OPTIONS] CONTAINER [CONTAINER...]

1、说明

options 作用
-f 通过SIGKILL信号删除一个正在运行的容器
-l 移除容器间的网络,而非容器本身
-v 删除与容器映射的目录

2、实例

强制删除容器

docker rm -f name

删除所有已停止的容器

docker rm$(docker ps -a -q)

删除所有容器

docker rm -f $(docker ps -aq)
docker ps -a -q | xargs docker rm

删除tomcat

五、create

创建一个新的容器但不启动它

语法格式
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
option 作用
–name 指定容器的名字

实例

根据 tomcat 镜像,创建一个 myTomcat 容器
docker create --name=myTomcat tomcat
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker create --name tomcat8 tomcat:8
[root@localhost ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
tomcat        8         2d2bccf89f53   8 months ago    678MB
[root@localhost ~]# docker ps -a
CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS NAMES
5b011e57c4d7   tomcat:8   "catalina.sh run" About a minute ago   Created   tomcat8

六、exec

在正在运行的容器中运行命令

语法格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
options 作用
-d 在后台运行命令
-i 即使没有附加也保持STDIN打开,和-t配合
-t 进入容器的CLI模式
-e 设置环境变量
–env-file 读入环境变量文件
-w 需要执行命令的目录
-u 指定访问容器的用户名

实例

执行 tomcat 容器的 startup.sh 脚本

[root@localhost ~]# docker exec -it tomcat8 startup.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/openjdk-11
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
Tomcat started.

进入容器的 CLI 模式(最常用)

[root@localhost ~]# docker exec -it tomcat8 bash
[root@localhost ~]# docker exec -it tomcat8 bash
root@5b011e57c4d7:/usr/local/tomcat# 
root@5b011e57c4d7:/usr/local/tomcat# exit
exit

执行普通命令

[root@localhost ~]# docker exec -it tomcat8 pwd
[root@localhost ~]# docker exec -it tomcat8 pwd
/usr/local/tomcat

以 root 用户身份进入容器(重点)

[root@localhost ~]# docker exec -it -uroot jenkins bash
root@afb882148e5e:/# 

好处就是,你在容器里敲命令就是 root 用户,畅通无阻,不存在权限不足的问题

七、pause/unpause

docker pause:	暂停一个或多个容器中的所有进程
docker unpause:	恢复一个或多个容器中的所有进程
语法格式
docker pause CONTAINER [CONTAINER...]
docker unpause CONTAINER [CONTAINER...]

实例

暂停tomcat容器的服务

[root@localhost ~]# docker pause tomcat8 

恢复tomcat容器的服务文章来源地址https://www.toymoban.com/news/detail-721122.html

[root@localhost ~]# docker unpause tomcat8 

到了这里,关于Docker——容器生命周期管理(下篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET开源IOC内置容器,生命周期管理与Autofac扩展

    大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家从基础小白到高阶的.NET的IOC容器依赖与注入,以及IOC内置容器和生命周期,Autofac的学习,跟上我的步伐进入C#的世界。 微信:15319589104 QQ: 2981345658 文章内容: .NET依赖注入容器的生命周期管理,瞬时生命周期(

    2024年01月21日
    浏览(50)
  • (二)linux使用docker容器运行mysql

    前言:在上一章安装好linux环境后,开始搭建msyql数据库,之前都是用windows安装mysql的,即使在linux上安装也是用tar解压,然后一堆的配置东西,现在用docker就是爽,几行命令就行 我这里就只放上几条指令,按顺序执行就可以,想详细看的同学可以参考这位博主的博客超详细!

    2024年02月04日
    浏览(44)
  • Linux部署DockerUI结合内网穿透实现远程管理本地Docker容器

    DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基于容器安装方式,部署方便高效,浏览和维护docker单节点或集群节点worker和manager。DockerUI具有易于使用的界面。它不需要记住 docker 指令。只需下

    2024年03月20日
    浏览(51)
  • docker学习:docker容器管理

    Docker 是一种开源的容器化平台,可以帮助开发人员和系统管理员更轻松地创建、部署和运行应用程序。它利用 Linux容器技术,将应用程序及其依赖项打包成一个可移植的容器,以便在不同的环境中运行,从而实现应用程序的快速部署和可移植性。 1、直接拉取别人构建好的官

    2024年02月11日
    浏览(36)
  • Docker技术--Docker容器管理

    1.Docker 容器相关的指令(单个容器操)        我们之前在Docker中部署了一个实际应用的案例wordpress,其中使用到了一些相关于容器的指令,那么下面我们一起来总结使用。 Docker指令的语法规则如下所示: Docker + 命令 [+参数选项] -1 类:关闭、开启、重启、开启自启 systemct

    2024年02月11日
    浏览(44)
  • K8s(四)Pod资源——pod生命周期、重启策略、容器钩子与容器探测

    目录 Pod生命周期 Pod重启策略 初始化容器 容器钩子 容器探测 启动探测 存活探测 就绪探测 参考资料 Pod 的生命周期 | Kubernetes Init 容器 | Kubernetes Pod的生命周期可以分为以下几个阶段: Pending(等待):在这个阶段,Pod被创建,并且正在等待被调度到一个节点上运行。此时,

    2024年01月20日
    浏览(48)
  • 【云原生|Kubernetes】12-容器生命周期的回调(PreStart和PreStop)

    我们知道,K8S可以在应用容器启动之前先执行一些预定义的操作,比如事先生成一些数据,以便于应用容器在启动的时候使用。这种方式可以通过init container技术实现。 那么事实上,在实际生产中,还有一种需求,就是我们需要在应用容器启动后执行一些初始化操作,比如设

    2024年02月12日
    浏览(47)
  • 【Docker系列】容器基础、Docker镜像管理

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长🌞 Github👨🏻‍💻:念舒_C.ying CSDN主页✏️:念舒_C.ying 个人博客🌏 :念舒_C.ying 2.1 Docker镜像查找 命令查找 docker官网查找 2.2 Docker镜像管理 拉取MySQL镜像 查看本地镜像 镜像加速(阿里云) Daocloud镜像站加速 镜像删除 2.3 容器

    2024年01月25日
    浏览(46)
  • Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

    💖The Begin💖点点关注,收藏不迷路💖 在开始之前,我们需要确保已经安装了 Docker 。 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包