Docker(三)- 从镜像运行启动容器「建议收藏」

Docker(三)- 从镜像运行启动容器「建议收藏」文章目录从镜像运行启动容器容器启动后运行的命令`ENTRYPOINT`和`CMD`启动容器时覆盖`ENTRYPOINT`和`CMD“-d`后台运行`dockerexec`进入容器,运行指定命令`–name`和`–restart=always“–rm`和`dockercp`从镜像运行启动容器从一个镜像可以运行启动一个或多个容器。所谓容器,我们可以理解为是一个虚拟的计算机,其中运行着操作系统,操作系统中运行着我们部署的应用。从tomcat镜像启动容器:do

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、从镜像运行启动容器

a

从一个镜像可以运行启动一个或多个容器。

所谓容器,我们可以理解为是一个虚拟的计算机,其中运行着操作系统,操作系统中运行着我们部署的应用。

tomcat 镜像启动容器:

docker run tomcat

a
容器启动后在容器中运行了 tomcat 应用。

这样启动会占用命令行,可以用 ctrl+c 退出 tomcat 应用。当容器中没有任何应用运行时,容器也会自动关闭退出

a

查看容器:

docker ps -a

a

二、容器启动后运行的命令

容器启动后需要运行指定的命令来启动一个应用。

在镜像中指定的默认运行命令:

docker history tomcat

a
tomcat 镜像中设置的 CMD 指令指定了容器启动后默认运行的命令catalina.sh run

再来看看其他镜像中设置的默认命令:

docker history redis

---------------------------------------------------------------------------------
[root@localhost ~]# docker history redis
IMAGE          CREATED       CREATED BY                                      SIZE
bc8d70f9ef6c   3 weeks ago   /bin/sh -c #(nop) CMD ["redis-server"] 0B
<missing>      3 weeks ago   /bin/sh -c #(nop) EXPOSE 6379 0B
<missing>      3 weeks ago   /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B



docker history mariadb

---------------------------------------------------------------------------------
[root@localhost ~]# docker history mariadb
IMAGE          CREATED       CREATED BY                                      SIZE
eff629089685   13 days ago   /bin/sh -c #(nop) CMD ["mysqld"] 0B
<missing>      13 days ago   /bin/sh -c #(nop) EXPOSE 3306 0B
<missing>      13 days ago   /bin/sh -c #(nop) ENTRYPOINT ["docker-entry… 0B


docker history centos:8

----------------------------------------------------------------------------------
[root@localhost ~]# docker history centos:8
IMAGE          CREATED        CREATED BY                                      SIZE
300e315adb2f   6 months ago   /bin/sh -c #(nop) CMD ["/bin/bash"] 0B

三、ENTRYPOINTCMD

这两向设置都是用来设置容器中运行的命令。

只设置 CMD 来执行 ls -a -l

CMD ["ls", "-a", "-l"]

只设置 CMD 是常见的用法。

ENTRYPOINTCMD 两个一起设置来执行 ls -a -l

ENTRYPOINT ["ls"]
CMD ["-a", "-l"]

两项一起设置时,会把两项设置的内容连接起来作为一个完整的命令

四、启动容器时覆盖 ENTRYPOINTCMD

覆盖 CMD
tomcat 镜像为例,镜像中设置的默认命令是 catalina.sh run,可以任意指定命令覆盖这个默认命令,这里执行 ls -a -l 来测试:

docker run tomcat ls -a -l

覆盖 ENTRYPOINT
--entrypoint:设置运行的命令,不许写在镜像名称 tomcat 的前面。注意,这里不能添加命令的参数;

镜像名称 tomcat 后面的内容会覆盖 CMD

docker run --entrypoint ls tomcat -a -l

五、-d 后台运行

后台运行启动 tomcat 容器:

docker run -d tomcat

a

查看后台运行的容器:

# 只查看运行的容器
docker ps 

# 查看所有容器,包括已停止的容器
docker ps -a

# 仅列出容器的 id
docker ps -aq

查看容器的日志:

可以使用容器的名称或 id,使用id是允许至少写三位,能与其他id区分即可

docker logs 4d3

六、docker exec 进入容器,运行指定命令

绝大多数情况下一个容器中只运行一个应用。

容器中也允许运行启动多个应用,可以进入已经启动的容器, 在里面运行启动其他应用:
a

# 进入容器,运行指定的命令
docker exec -it 4d3 pwd
docker exec -it 4d3 touch f1.txt
docker exec -it 4d3 ls -l

# 启动 top 查看进程列表
# ctrl+c 可以退出top
docker exec -it 4d3 top

# 启动bash命令行
# exit 可以退出bash
docker exec -it 4d3 bash

七、--name--restart=always

--name
每个启动的容器都可以指定一个名称,方便使用名称来操作容器。

--restart=always
docker系统服务重启,或者操作系统重启,容器可以随系统自动启动。

# cat1容器可以随系统启动
docker run -d \
--name cat1 \
--restart=always \
tomcat

# cat2系统重启后默认是关闭状态,不会自动启动
docker run -d \
--name cat2 \
tomcat

# 查看容器
docker logs cat1

docker inspect cat1

# 重启docker系统服务
systemctl restart docker

# 查看容器,可以看到 cat1 自动重启了,而 cat2 处于关闭状态
docker ps -a

八、--rmdocker cp

--rm
有时候我们会临时使用一个容器之后这个容器就不再使用,添加 --rm 参数可以在容器停止时自动删除容器

docker cp
在容器和宿主机之间复制文件

下面来看一个实际的例子,这个例子中我们从 tomcat 的一个临时容器复制配置文件 server.xml 到宿主机,然后在 server.xml 中修改端口号,把 8080 改成 80

# 启动一个临时容器
docker run -d \
--rm \
--name tmp \
tomcat

# 把 tomcat 的 server.xml 复制到宿主机的 /root/ 目录下
docker cp tmp:/usr/local/tomcat/conf/server.xml  /root/

# 停止临时容器,会自动删除
docker stop tmp

docker ps -a

# 修改 server.xml 中的8080端口,改成80
vim server.xml

# -v 把宿主机路径挂载到容器的一个路径
# 挂载的路径可以是文件,也可以是文件夹
# 这里把修改过的 server.xml 挂载到新启动的容器中
docker run -d \
--name cat2 \
-v /root/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat

# 查看启动日志,确认使用 80 端口启动
docker logs cat2

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193137.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker 查看端口被占用进程[通俗易懂]

    docker 查看端口被占用进程[通俗易懂]以下找到相应进程或容器后,可以将对于进程或容器停止或删除现在希望启动一个dockercontainer,把container中的80端口映射到宿主机。[root@cmdb2~]#dockerrun-p80:80-it9d1c954badc7/bin/bash[root@cmdb2~]#dockerpsCONTAINERIDIM…

    2022年7月27日
    82
  • jenkinsfile docker_dockerfile制作镜像

    jenkinsfile docker_dockerfile制作镜像前言之前我们用docker手动安装了jenkins环境,在jenkins中又安装了python3环境和各种安装包,如果我们想要在其他3台机器上安装,又是重复操作,重复劳动,那会显得很low,这里可以

    2022年7月31日
    30
  • Jenkins(4)docker容器内部修改jenkins容器时间「建议收藏」

    Jenkins(4)docker容器内部修改jenkins容器时间「建议收藏」前言用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间查看时间查看系统时间date-R进入docker容器内部,查看容器时间dockere

    2022年7月28日
    7
  • docker搭建kafka集群

    docker搭建kafka集群docker搭建kafka集群我在M1mbp上使用的以下镜像新建文件zk-kafka-docker-compose.ymlversion:”2″services:zookeeper:user:rootimage:docker.io/zookeeperports:-“12181:2181″environment:-ALLOW_ANONYMOUS_LOGIN=yesvolumes:-zoo

    2022年4月25日
    29
  • Docker网络,网络工程师还不赶紧收藏!

    Docker网络,网络工程师还不赶紧收藏!学习Docker网络前建议清空所有环境dockerrmi-f$(dockerimages-aq)每启动一个docker容器,docker就会给docker容器分配一个ip。只要安装了docker,就会有一个网卡docker0(桥接模式,使用的是evth-pair技术)什么是Evth-pairEvth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备。OpenStac,Dock

    2022年7月19日
    15
  • docker pycharm 连接_pycharm远程连接docker开发[通俗易懂]

    docker pycharm 连接_pycharm远程连接docker开发[通俗易懂]1配置docker服务端(c/s架构)允许远程客户端连接-1vim/lib/systemd/system/docker.service…#ExecStart=/usr/bin/dockerd-Hfd://–containerd=/run/containerd/containerd.sockExecStart=/usr/bin/dockerd-Htcp://0.0.0.0:2…

    2022年8月27日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号