关于docker镜像和容器的一些常用命令

帮助命令

docker version  #查看版本的信息
docker info     #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help  #帮助命令

官方学习文档:https://docs.docker.com/engine/reference/commandline/dockerd/

镜像命令

docker images      #列出本地镜像
  Options:
  -a, --all             Show all images (default hides intermediate images)  #:列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  -q, --quiet           Only show image IDs    #只显示镜像id

docker search 搜索命令

docker search   mysql  #搜索mysql
​
​
docker search mysql --filter=STARS=3000  #过滤,STARS>=3000的数据查询出来
​
----
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11306     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4294      [OK]  

docker pull 下载镜像

# 下载镜像 docker pull 镜像名:[版本]
docker pull mysql  #不写版本,默认下载latest,也就是最新版
Using default tag: latest
latest: Pulling from library/mysql
e1acddbe380c: Pull complete       #分层下载,docker image的核心,联合文件系统
bed879327370: Pull complete 
03285f80bafd: Pull complete 
ccc17412a00a: Pull complete 
1f556ecc09d1: Pull complete 
adc5528e468d: Pull complete 
1afc286d5d53: Pull complete 
6c724a59adff: Pull complete 
0f2345f8b0a3: Pull complete 
c8461a25b23b: Pull complete 
3adb49279bed: Pull complete 
77f22cd6c363: Pull complete 
Digest: sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926  #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    #真实地址
​
#指定版本的时候,一定要去docker官方看看有没有对应的版本,有才能下载
docker pull mysql:5.7
5.7: Pulling from library/mysql
e1acddbe380c: Already exists 
bed879327370: Already exists 
03285f80bafd: Already exists 
ccc17412a00a: Already exists 
1f556ecc09d1: Already exists 
adc5528e468d: Already exists 
1afc286d5d53: Already exists     #上面这些已经存在了,就不会再下载,共用,联合文件系统的功能
4d2d9261e3ad: Pull complete 
ac609d7b31f8: Pull complete 
53ee1339bc3a: Pull complete 
b0c0a831a707: Pull complete 
Digest: sha256:7cf2e7d7ff876f93c8601406a5aa17484e6623875e64e7acc71432ad8e0a3d7e
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
​

docker rmi 删除镜像

docker rmi -f 镜像id
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker rmi -f 5a4e492065c7   #删除指定镜像
​
Untagged: mysql:latest
Untagged: mysql@sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926
Deleted: sha256:5a4e492065c722ec8cc7413552bafc6fd5434c5ad90797e898ccc4e347e21aa5
Deleted: sha256:816bf92c28337cd97393cb1fab7697398c9b657baa8e80ad394e1193bdd7c323
Deleted: sha256:4d9cad11f64589b397b1033d6f14cea1794efbee0a9923932fb3394a67cb9812
Deleted: sha256:d8cc28a31b469770ffe2239a29aaef8745fedc4df3c545b1615ba864796709a3
Deleted: sha256:c65a377e07f1205f3c28f7067d2ac4da3a65fbe7c1b4606b48028db3818d2f4c
Deleted: sha256:7dcd840f1d4be1a565f470453489932a17c62ed36b959d7839f004606ba22f0b
​
docker rmi -f 镜像id  镜像id  镜像id  #删除多个镜像
​
docker rmi -f $(docker images -aq)  #删除全部的镜像

容器命令

说明:有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

/bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。

docker run [可选参数] image(镜像名称) /bin/bash 
​
#参数说明
 --name="Name"   容器名字, tomcat01  xie01 ,用来区分容器
 -d              后台方式运行
 -it             使用交互方式运行,进入容器查看内容
 -p(小p)             指定容器的端口   -p  8080:8080
       -p ip:主机端口:容器端口
       -p 主机端口:容器端口  (常用)
       -p 容器端口
 -P(大p)             随机指定端口
 
 
 
 #docker run -it centos /bin/bash
 [root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -it centos /bin/bash   #启动并进入容器
 [root@3e7296da4cc4 /]# ls                       #基础版本的centos 很多命令都是不完善的
  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys    tmp  usr  var
​
​
#给容器取名
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -it --name=myxie666666 centos /bin/bash
[root@d43bd82483af /]# 
​

查看容器

docker ps   #查看正在运行的容器
docker ps -a #查看当前运行的容器+历史运行过的容器
docker ps -n=? #显示最近创建的容器,指定个数
docker ps -q #只显示容器的编号

退出容器

#退出命令
  exit      #容器退出并停止
 
  CTRL +P +Q  #容器不停止退出

删除容器

docker rm 容器id    #删除指定的容器,不能删除正在运行的容器   如果要强制删除, rm -f
docker rm -f $(docker ps -aq)   #删除所有的容器   去掉-f就是删除所有没有运行的容器
docker ps -a -q|xargs docker rm  #删除所有的容器

启动容器和停止容器

docker start 容器id/name     #启动容器
docker restart 容器id/name   #重启容器
docker stop  容器id/name     #停止当前正在运行的容器
docker  kill 容器id/name     #强制停止当前容器

常用其他命令

容器启动的一些注意点:

使用docker run -d 镜像名 ,创建容器在以守护状态在后台运行,因为容器没有前台进程,容器会自动关闭,就算使用docker start 容器id/name启动,也会马上关闭就像没启动一样,如果使用 docker run -dit(也就是-d -it) 镜像名,-it进入到容器的交互模式,也就是进入容器 ,但因为-d的存在,并不会进入容器,在后台运行,但是这时的容器是启动状态!!,还有注意一点时使用 -d参数之后声明该容器是守护状态,指定程序结束后,容器也会结束,在这加上/bin/bash也是立马结束的,原因待查,但应该是一开始bash就结束了,导致容器也结束了

[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -d --name=xie1 centos
2800c5c52dc2c55d7be8f1daa1d6997b04dfa61fb4a30fbaf0c254b4d71df2a4
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -dit --name=xie2 centos
282205f26662d2b2b5a8e306fc24a1122b2b60a10cf04f1c483962bc08e1fa60
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
282205f26662   centos    "/bin/bash"   4 seconds ago   Up 3 seconds             xie2
​
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -d --name=xie3 centos /bin/bash   #容器未启动
ab27d9cd21b2f7d76de28d491de5723dbf99a5d5307134ade162f62dbfa40785
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
282205f26662   centos    "/bin/bash"   42 seconds ago   Up 41 seconds             xie2
​
​

查看日志

docker logs  -tf --tail 10(number)  容器id/name   #显示10条日志
   -tf  #显示日志
   --tail number  #显示日志条数   number必须写

查看容器中进程信息

docker top 容器id/name
​
​
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker top qiao1
UID                 PID                 PPID                C                  
root                29698               29680               0

查看镜像的元数据

#命令
docker inspect 容器id/name
​
#测试
​
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker run -dit --name=qiao1 centos
792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
792acc429152   centos    "/bin/bash"   5 seconds ago    Up 5 seconds              qiao1
​
​
[root@iZ2ze9t1mjnpzcj22wic23Z docker]# docker inspect qiao1
[
    {
        "Id": "792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b",
        "Created": "2021-08-21T13:14:03.053742853Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 29698,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-08-21T13:14:03.325766259Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        "ResolvConfPath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/hostname",
        "HostsPath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/hosts",
        "LogPath": "/var/lib/docker/containers/792acc429152abf7fbad2f9c39fd46ac136d540bdf6ae690b7bc85791b11c06b/792acc429152abf7fbad2f9c39fd46ac136d54
0bdf6ae690b7bc85791b11c06b-json.log",        "Name": "/qiao1",
        "RestartCount": 0,
        "Driver": "overlay2",
​




Docker中的Dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

使用 Dockerfile 定制镜像

这里仅讲解如何运行 Dockerfile 文件来定制一个镜像,具体 Dockerfile 文件内指令详解,在后面写出

1、下面以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件)

在一个空目录下,新建一个名为 Dockerfile 文件,并在文件内添加以下内容:

FROM nginx
RUN echo '这是我自己的nginx镜像' > /usr/share/nginx/html/index.html

2、FROM 和 RUN 指令的作用

FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:

shell 格式:

RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。

exec 格式:

RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如:

FROM centos
​
RUN yum install wget
​
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
​
RUN tar -xvf redis.tar.gz
​
#以上执行会创建 3 层镜像。可简化为以下格式:
​
FROM centos
​
RUN yum install wget \
​
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
​
    && tar -xvf redis.tar.gz
​

如上,以 && 符号连接命令,这样执行后,只会创建 1 层镜像。

开始构建镜像

在 Dockerfile 文件的存放目录下,执行构建动作。

以下示例,通过目录下的 Dockerfile 构建一个 nginx:xieqiao(镜像名称:镜像标签)。

$ docker build -t nginx:xieqiao .

后面的 . 不能省,他代表的是上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。

解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。

如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。

注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

出现  Successfully tagged nginx:xieqiao 就代表创建成功了,使用

docker  images

查看是否创建成功

注:本文参考bilibili上面的视频和其他资料手敲笔记,若侵权请联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值