daoker基本操作二(容器的基本操作)

本文介绍了Docker容器的基本操作,包括如何使用`docker run`启动容器,通过`docker exec`进入容器并进行交互,修改容器内的文件,以及如何使用`docker commit`保存容器的修改为新镜像。此外,还涵盖了`docker diff`检查容器内修改,`docker history`查看镜像历史,`docker ps`列出容器,`docker stop`和`docker rm`停止与删除容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前提到过镜像和容器的关系就像面向对象思想中类和实例的关系,启动一个容器就好比实例化某个镜像

1.启动镜像 :docker run

命令:docker run [选项] 仓库名[:标签] [指令]

常用参数:

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-p: 端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--name="nginx-lb": 为容器指定一个名称;

以nginx为例:

拉取镜像:docker pull nginx  # 如果是使用的官方镜像源并且拉取速度比较慢的话可以配置免费的加速器docker:配置 Docker 加速器-优快云博客

运行镜像:docker run --name webserver -d -p 80:80 nginx  # 基于nginx在后台建立一个容器并命名为webserver、映射80端口,

运行结果:

[work@VM_0_3_centos docker_lianxi]$ docker run --name webserver -d -p 80:80 nginx
62018f2db2b391278e4427b6409861cdd19bc04c2015b4e66a8dc9ad3b235417
[work@VM_0_3_centos docker_lianxi]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
62018f2db2b3        nginx               "nginx -g 'daemon of…"   8 seconds ago       Up 8 seconds        0.0.0.0:80->80/tcp   webserver

此时我们在浏览器中输入http://localhost就可以看到Welcome to nginx!页面!(云服务器请浏览器访问服务器外网ip)

2.进入容器:docker exec

命令:docker exec [选项] 容器名/容器id 指令

参数:

-d :分离模式: 在后台运行

-i :即使没有附加也保持STDIN 打开

-t :分配一个伪终端

进入刚刚启动的webserver并进入交互模式:docker exec -it webserver bash

我们刚刚浏览器访问localhost时显示的页面就存在这个路径下面:/usr/share/nginx/html/

我们可以直接查看里面的内容:cat /usr/share/nginx/html/index.html

此时我们还不能直接用vi来修改文件我们需要给容器安装vim(容器是一个独立的系统)

1.更新源:apt-get update

2.安装vim:apt-get install -y vim

此时我们就可以使用VI来修改index.html文件来改变访问localhost时显示的内容了

如果不用vi我们也可以借助重定向符号'>'来对文件进行修改

如:echo "<h1>hello world</h1>" > /usr/share/nginx/html/index.html

此时我们浏览器访问localhost时就换变成hello world

3.退出容器 exit

命令:exit

4.查看容器内部的修改:docker diff

命令:docker diff [选项] 容器名/容器id

如我们要查看我们对webserver做了哪些修改

docker diff webserver

5.将当前容器制作成一个镜像: docker commit

命令:docker commit [选项] 容器名/容器id [仓库名[:标签]]

-a :提交的镜像作者

-c :使用Dockerfile指令来创建镜像

-m :提交时的说明文字

-p :在commit时,将容器暂停

如我们想将刚刚我们修改后的webserver保存为一个镜像,方便我们下次创建容器时直接是我们修改后的样子

docker commit -a "sgs921107" -m "修改了主页" webserver nginx:v1.1

6.查看镜像内部经过改动的历史记录:docker history

命令:docker history [选项] 仓库名:标签

-H :以可读的格式打印镜像大小和日期,默认为true

--no-trunc :显示完整的提交记录

-q :仅列出提交记录ID

如:docker history nginx:v1.1

7.列出所有启动的容器:docker ps

命令:docker ps [选项]

-a :显示所有的容器,包括未运行的

-f :根据条件过滤显示的内容

--format :指定返回值的模板文件

-l :显示最近创建的容器

-n :列出最近创建的n个容器

--no-trunc :不截断输出

-q :静默模式,只显示容器编号

-s :显示总的文件大小

8.停止正在运行的容器:docker stop

命令:docker [选项] 容器名1 [容器2、容器3...]

如停止之前运行的webserver: docker stop webserver

我们再想启动的时候就使用docker start webserver,重启:docker restart webserver

9.删除容器:docker rm

命令:docker rm [选项] 容器名/容器id [容器2、容器3...]

-f :通过SIGKILL信号强制删除一个运行中的容器

-l :移除容器间的网络连接,而非容器本身

-v :-v 删除与容器关联的卷

和删除镜像一样可以和查询配合使用

如:docker rm $(docker ps -a -q)

ps:

使用docker commit创建镜像时我们需要先基于镜像运行一个容器,然后进入容器修改后保存为一个新镜像(暂且这么理解),其实我们在进入容器修改容器内的文件实际是在容器的存储层记录我们的操作,当我们保存镜像的时候并不是把原镜像进行修改然后重新打包,这个过程是在原镜像的基础上又封装了一层,就是当我们用我们保存的镜像启动容器时会执行到原nginx镜像的执行结果然后执行我们修改的操作最终我们看到的是修改后的文件。

        镜像并不是我们以为的是一个整体,它是有一层一层包起来的,其实每一层就可以视为一个小镜像,外层依赖于更里面的层。并且如果两个镜像的内层都拥有了同一个内层,这个内层在内存中是只存储一个的。比如上面讲的我们commit的nginx:v1.1,我们并不是在原nginx镜像上包了一层又存储一份,而是在内存中添加了一层,在我们使用我们保存的镜像nginx:v1.0的时候docker服务器就会执行原nginx的那些层然后执行我们最后保存的那一层

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值