docker菜鸟教程常用指令(如何在容器中运行docker命令)

:暂无数据 2026-04-11 11:00:02 0
有没有觉得docker菜鸟教程常用指令听起来很高深?别怕,今天我们就把它和如何在容器中运行docker命令一起,拆解成易懂的小知识点。

本文目录

如何在容器中运行docker命令

  我们可以轻易地在Docker容器中运行大多数GUI程序且不出错。Docker是一个开源项目,提供了一个打包、分发和运行任意程序的轻量级容器
的开放平台。它没有语言支持、框架或者打包系统的限制,并可以运行在任何地方、任何时候,从小型的家用电脑到高端的服务器都可以运行。这让人们可以打包不
同的包用于部署和扩展网络应用,数据库和后端服务而不必依赖于特定的栈或者提供商。
下面是我们该如何在Docker容器中运行GUI程序的简单步骤。本教程中,我们会用Firefox作为例子。
1. 安装 Docker
在开始前,我们首先得确保在Linux主机中已经安装了Docker。这里,我运行的是CentOS 7 主机,我们将运行yum管理器和下面的命令来安装Docker。
# yum install docker
# systemctl restart docker.service
2. 创建 Dockerfile
现在,Docker守护进程已经在运行中了,我们现在准备创建自己的Firefox
Docker容器。我们要创建一个Dockerfile,在其中我们要输入需要的配置来创建一个可以工作的Firefox容器。为了运行 Docker
镜像我们需要使用最新版本的CentOS。要创建 Docker 镜像,我们需要用文本器创建一个名为Dockerfile的文件。
# nano Dockerfile
接着,在Dockerfile中添加下面的行并保存。
#!/bin/bash
FROM centos:7
RUN yum install -y firefox
# 用你自己的 uid /gid 替换下面的0
RUN export uid=0 gid=0
RUN mkdir -p /home/developer
RUN echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash"》》/etc/passwd
RUN echo "developer:x:${uid}:"》》/etc/group
RUN echo "developer ALL=(ALL) NOPASSWD: ALL"》》/etc/sudoers
RUN chmod 0440/etc/sudoers
RUN chown ${uid}:${gid}-R /home/developer
USER developer
ENV HOME /home/developer
CMD /usr/bin/firefox
注意:在第四行的配置中,用你自己的用户和组id来替换0。 我们可以用下面的命令在shell或者终端中得到uid和gid。
# id $USER
3. 构造Docker容器
下面我们就要根据上面的Dockerfile构建一个容器。它会安装firefox浏览器和它需要的包。它接着会设置用户权限并让它可以工作。这里镜像名是firefox,你可以根据你的需要命名。
# docker build --rm -t firefox .
4. 运行Docker容器
现在,如果一切顺利,我们现在可以在运行在CentOS 7镜像中的Docker容器里面运行我们的GUI程序也就是Firefox浏览器了。
# docker run -ti --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix firefox
总结
在Docker容器中运行GUI程序是一次很棒的体验,它对你的主机文件系统没有任何的伤害。它完全依赖你的Docker容器。

Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)

摘要: Docker

容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用 docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等

容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下

在实际使用中启动一个镜像,例如

-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些-e参数,在Dockerfile指定环境变量

直接构建成容器

开启一个终端启动容器内部,打印指定的环境变量a

此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量

因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构

其中config.yml是一个空配置文件,在run.sh中先使用echo写入追加配置参数到config.yml在执行Python脚本

Dockerfile中启动run.sh脚本作为容器执行命令

在启动容器时,使用-e指定环境变量,在run.sh中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下

-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如

如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下

同目录下start.sh内容是打印1

构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下start.sh内容是打印2

docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出

对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是

测试一个Dockerfile输出1

在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT

容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如

显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机-》容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如

除了docker stop命令还有一种停止容器的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如

在容器停止之后可以使用 docker start 再启动一个停止的容器,例如

除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如

查看容器详情使用 docker inspect ,比如

在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令

容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如

除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况

当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台

创建Dockerfile以及构建镜像,启动容器

启动一个脚本不断请求api接口

进入容器内部查看日志

另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出

此时宿主机的logs目录下为空,容器中的logs目录下存在detail.log文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式

此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致

如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包

此时退出容器,并且删除容器,最后从镜像重新生成容器

此时进入容器检查,并不存在pymongo包

如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下

以新安装pymongo的容器为例,对新容器使用docker commmit

新生成的镜像叫做xiaogp/my_image_test:v2

从新镜像启动容器并进入容器查看存在新安装的pymongo

如何查看docker 里某个容器的的启动命令

1,在容器外部,物理机上,可以用docker inspect查看或者,docker inspect container。

2,如果在容器内部。可以用 ps -fe 查看。其中1号进程就是启动命令。

3,Docker会在隔离的容器中运行进程。当运行docker run命令时,Docker会启动一个进程,并为这个进程分配其独占的文件系统、网络资源和以此进程为根进程的进程组。在容器启动时,镜像可能已经定义了要运行的二进制文件、暴露的网络端口等,但是用户可以通过docker run命令重新定义(译者注:docker run可以控制一个容器运行时的行为,它可以覆盖docker build在构建镜像时的一些默认配置),这也是为什么run命令相比于其它命令有如此多的参数的原因。
4,命令格式

5,最基本的docker run命令的格式如下:
$ sudo docker run

6,如果需要查看的详细使用说明,请参考Docker关于OPTIONS的章节。这里仅简要介绍Run所使用到的参数。OPTIONS总起来说可以分为两类:

设置运行方式:

决定容器的运行方式,前台执行还是后台执行;

设置containerID;

设置网络参数;

设置容器的CPU和内存参数;

设置权限和LXC参数;

设置镜像的默认资源,也就是说用户可以使用该命令来覆盖在镜像构建时的一些默认配置。

7,docker run 可以让用户完全控制容器的生命周期,并允许用户覆盖执行docker build时所设定的参数,甚至也可以修改本身由Docker所控制的内核级参数。

关于docker菜鸟教程常用指令如何在容器中运行docker命令,如果你有更妙的比喻或更独到的见解,欢迎在评论区“踢馆”,让我们共同进步。
本文编辑:admin

更多文章:


tomcat乱码怎么改(tail查看tomcat日志出现乱码,有什么办法)

tomcat乱码怎么改(tail查看tomcat日志出现乱码,有什么办法)

tomcat乱码怎么改和tail查看tomcat日志出现乱码,有什么办法,看似独立,实则血脉相连。它们是如何相互影响的?本文将为你层层剖析。

2026年4月11日 13:00

如何下载安卓软件到手机?安卓软件是什么东西

如何下载安卓软件到手机?安卓软件是什么东西

各位老铁们好,相信很多人对安卓软件都不是特别的了解,因此呢,今天就来为大家分享下关于安卓软件以及如何下载安卓软件到手机的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年4月11日 12:40

后缀名为js的是什么文件(js 如何是什么文件)

后缀名为js的是什么文件(js 如何是什么文件)

还记得第一次接触后缀名为js的是什么文件时的茫然吗?是js 如何是什么文件这个概念,像一盏灯照亮了后续的路。本文将为你点亮这盏灯。

2026年4月11日 12:20

java菜鸟网(菜鸟学习Java需要提前做好哪些准备)

java菜鸟网(菜鸟学习Java需要提前做好哪些准备)

曾几何时,我也觉得java菜鸟网高不可攀,尤其菜鸟学习Java需要提前做好哪些准备更是一头雾水。后来才发现,只是没找对方法,希望我的经验能帮到你。

2026年4月11日 12:00

h5免费制作软件哪个好(h5用什么软件制作会比较省时省力呢)

h5免费制作软件哪个好(h5用什么软件制作会比较省时省力呢)

在了解h5免费制作软件哪个好的过程中,您是否也曾对h5用什么软件制作会比较省时省力呢感到困惑?别担心,接下来我将结合常见场景,带您一步步理清其中的关键点。

2026年4月11日 11:40

jquery设置select选中(jquery怎么设置select选中某项值)

jquery设置select选中(jquery怎么设置select选中某项值)

从我第一次听说jquery设置select选中到真正弄懂jquery怎么设置select选中某项值,也走过一些弯路。下面就把我的学习心得分享给大家,希望能让您的入门之路更顺畅。

2026年4月11日 11:20

docker菜鸟教程常用指令(如何在容器中运行docker命令)

docker菜鸟教程常用指令(如何在容器中运行docker命令)

有没有觉得docker菜鸟教程常用指令听起来很高深?别怕,今天我们就把它和如何在容器中运行docker命令一起,拆解成易懂的小知识点。

2026年4月11日 11:00

c语言如何给指针赋值(c语言结构体函数指针怎么赋值)

c语言如何给指针赋值(c语言结构体函数指针怎么赋值)

关于c语言如何给指针赋值,有一个概念至关重要,那就是c语言结构体函数指针怎么赋值。它为何如此重要?且听我们慢慢道来。

2026年4月11日 10:40

linux应用开发和软件开发(虚拟机只能装linux系统,如何进行软件开发)

linux应用开发和软件开发(虚拟机只能装linux系统,如何进行软件开发)

正如一位名家所言:“弄懂虚拟机只能装linux系统,如何进行软件开发,是通往linux应用开发和软件开发殿堂的捷径。” 今天,我们就来走一走这条捷径。

2026年4月11日 10:20

存储和镜像管理组件分别是(操作系统的内部是如何分工的)

存储和镜像管理组件分别是(操作系统的内部是如何分工的)

关注本号的朋友都知道,我们一直在持续输出关于存储和镜像管理组件分别是的干货。今天,我们就聚焦到大家反复问到的操作系统的内部是如何分工的上。

2026年4月11日 10:00

最近更新

jquery设置select选中(jquery怎么设置select选中某项值)
2026-04-11 11:20:02 浏览:0
热门文章

win10安装silverlight(silverlight安装失败)
2026-04-02 12:40:01 浏览:0
layernorm pytorch(batch norm和layer norm)
2026-04-01 23:20:02 浏览:0
cmd grep命令(如何在Command Line 命令中使用Grep)
2026-04-01 15:20:02 浏览:0
标签列表