docker镜像、容器等基础操作

在上一篇文章写了docker的一些概念,这一篇就是搞一下操作

镜像操作

1、获取镜像

从Docker镜像仓库获取镜像的命令是 docker pull 。格式为

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到, 这里我们说一下镜像名称的格式。

  • Docker 镜像仓库地址: 地址的格式一般是 <域名/IP>[:端口号] 。 默认地址是 DockerHub。
  • 仓库名: 如之前所说, 这里的仓库名是两段式名称, 即 <用户名>/<软件名> 。 对于 DockerHub, 如果不给出用户名, 则默认为 library , 也就是官方镜像。

比如:

[root@localhost ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete 
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

没有指定版本号,默认获取默认的标签 latest

如果要下载对应的版本,建议去dockerHub里去查找
image

2、列出镜像

展示出获取到的镜像命令是 docker images lsdocker images

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   5 months ago   209MB

各个选项说明:

  • REPOSITORY:表示镜像的仓库源
  • TAG:镜像的标签
  • IMAGE ID:镜像ID
  • CREATED:镜像创建时间
  • SIZE:镜像大小

3、搜索镜像

命令docker search 格式:

docker search PHP
[root@localhost ~]# docker search PHP
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
php                            While designed for web development, the PHP …   5915      [OK]       
phpmyadmin/phpmyadmin          A web interface for MySQL and MariaDB.          1125                 [OK]
adminer                        Database management in a single PHP file.       547       [OK]       
phpmyadmin                     phpMyAdmin - A web interface for MySQL and M…   218       [OK]       
webdevops/php-nginx            Nginx with PHP-FPM                              198                  [OK]
php-zendserver                 Zend Server - the integrated PHP application…   193       [OK]       
webdevops/php-apache-dev       PHP with Apache for Development (eg. with xd…   141                  [OK]
webdevops/php-apache           Apache with PHP-FPM (based on webdevops/php)    117                  [OK]
bitnami/php-fpm                Bitnami PHP-FPM Docker Image                    112                  [OK]

4、删除镜像

命令docker image rmdocker rmi

[root@localhost ~]# docker rmi php:7.3.28-zts
Untagged: php:7.3.28-zts
Untagged: php@sha256:12376ce3784aed520c59808e8b15ebae9ca2a2877100bacb598d4911106b27a0
Deleted: sha256:b7f4c7bf7df36f1021bf11b57500600d8efecf4aac6baf27b503ccec5dda44b5
.
.
Deleted: sha256:7e718b9c0c8c2e6420fe9c4d1d551088e314fe923dce4b2caf75891d82fb227d

image


容器操作

1、启动

启动容器有两种方式, 一种是基于镜像新建一个容器并启动, 另外一个是将在终止状态( stopped ) 的容器重新启动。
命令 docker run 例如:

$ docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#

其中, -t 选项让Docker分配一个伪终端( pseudo-tty) 并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

后台运行 使用-d参数来实现。

当利用 docker run 来创建容器时, Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像, 不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统, 并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

启动已终止容器 命令 docker container start xxxdocker start xxx

3、终止

可以使用 docker container stop xxxdocker stop xxx来终止一个运行中的容器。
在交互形态下 用户通过 exit 命令或 Ctrl+d 来退出终端时, 所创建的容器立刻终止。
可以用 docker ps -a 来查看终止状态的容器

[root@localhost ~]# docker stop php7
php7
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS                       PORTS     NAMES
35a0c32030af   php:7.3.28-zts   "docker-php-entrypoi…"   7 minutes ago   Exited (137) 7 seconds ago             php7

4、进入容器

在使用 -d 参数时, 容器启动后会进入后台。
某些时候需要进入容器进行操作, 包括使用 docker attach 命令或 docker exec 命令, 推荐大家使用 docker exec 命令, 原因在attach下如果从这个 stdin 中 exit, 会导致容器的停止。 如果在exec下从这个 stdin 中 exit, 不会导致容器的停止。 这就是为什么推荐大家使用 docker exec 的原因。
更多参数说明请使用 docker exec --help 查看。

exec 命令

-i -t 参数

docker exec 后边可以跟多个参数, 这里主要说明 -i -t 参数。
只用 -i 参数时, 由于没有分配伪终端, 界面没有我们熟悉的 Linux 命令提示符, 但命令执行结果仍然可以返回。
当 -i -t 参数一起使用时, 则可以看到我们熟悉的 Linux 命令提示符。

[root@localhost ~]# docker run -itd --name php7 php:7.3.28-zts 
23a3b7f291d0a26d750797543f2699e11e6cb3c913fa9c9d2e4176d2aecfeda5
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS     NAMES
23a3b7f291d0   php:7.3.28-zts   "docker-php-entrypoi…"   4 seconds ago   Up 4 seconds             php7
[root@localhost ~]# docker exec -it php7 bash
root@23a3b7f291d0:/# 

5、导入导出

导出容器

如果要导出本地某个容器, 可以使用 docker export 命令。
格式 docker export 容器名|容器id > xxx.tar

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS     NAMES
23a3b7f291d0   php:7.3.28-zts   "docker-php-entrypoi…"   13 minutes ago   Up 13 minutes             php7
[root@localhost ~]# docker export php7 > php7.tar
[root@localhost ~]# ls | grep php7.tar 
php7.tar

导入容器快照

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
可以使用 docker import 从容器快照文件中再导入为镜像, 例如

image

注: 用户既可以使用 docker load 来导入镜像存储文件到本地镜像库, 也可以使用 docker import 来导入一个容器快照到本地镜像库。 这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息( 即仅保存容器当时的快照状态) , 而镜像存储文件将保存完整记录,体积也要大。 此外, 从容器快照文件导入时可以重新指定标签等元数据信息。

6、删除

可以使用 docker container rmdocker rm 来删除一个处于终止状态的容器。 例如
image
如果要删除一个运行中的容器, 可以添加 -f 参数。 Docker 会发送 SIGKILL 信号给容器。

删除所有容器 慎用!! docker rm -f $(docker ps -a)

posted @ 2021-05-12 18:05  bogiang  阅读(176)  评论(0)    收藏  举报