Docker镜像下载&Docker镜像操作常用命令

Posted hzhiping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像下载&Docker镜像操作常用命令相关的知识,希望对你有一定的参考价值。

Docker系统简介

Docker系统有两个程序:docker服务端和docker客户端。其中docker服务端是一个服务进程,管理着所有的容器。docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。大部分情况下,docker服务端和客户端运行在一台机器上。

检查docker版本

检查docker的版本,这样可以用来确认docker服务在运行并可通过客户端链接。

命令如下:

[[email protected] ~]# docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:48:22 2018
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:19:08 2018
  OS/Arch:          linux/amd64
  Experimental:     false

举个例子

搜索tutorial可用的镜像

[[email protected] ~]# docker search tutorial
NAME                                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
learn/tutorial                                                                                40                                      
georgeyord/reactjs-tutorial                   This is the backend of the React comment box…   5                                       [OK]
microsoft/aci-tutorial-app                                                                    2                                       
fiware/tutorials.tourguide-app                FIWARE Tour Guide App sample application        1                                       [OK]
mhausenblas/kairosdb-tutorial                 GitHub fetcher for KairosDB tutorial            1                                       [OK]
microsoft/aci-tutorial-sidecar                                                                1                                       
muli/gluon-tutorials-zh                       https://github.com/mli/gluon-tutorials-zh       1                                       [OK]
chris24walsh/flask-aws-tutorial               Runs a simple flask webapp demo, with the op…   1                                       [OK]
colemurray/medium-facenet-tutorial            Container for medium-facenet-tutorial. Conta…   1                                       
fgraichen/concourse-tutorial-hello-world                                                      0                                       
camphor/python-tutorial                       camphor-/python-tutorial                        0                                       [OK]
activeeon/par-connector-tutorial              Do the par-connector tutorial with R. The tu…   0                                       [OK]
splicemachine/tutorial-spark-kafka-consumer   Spark Streaming Tutorial                        0                                       
krishnatest/docker-nodejs-tutorialkk          docker-nodejs-tutorialkk                        0                                       
rade95/concourse-tutorial-hello-world                                                         0                                       
helinwang/paddle-k8s-tutorial                                                                 0                                       
sahotay/concourse-tutorial-hello-world                                                        0                                       
kidikarus/concourse-tutorial-47-tasks                                                         0                                       
lukasheinrich/quickana-tutorial               Image for the analysis code built from https…   0                                       
starkandwayne/concourse-tutorial-ci                                                           0                                       
bluerdocker/concourse-tutorial-hello-world                                                    0                                       
dlws/tutorial-tensorflow-cpu                                                                  0                                       
joshuacox/rabbitmq-tutorials                  Rabbit MQ Tutorial Demos                        0                                       [OK]
cloudboost/tutorial                                                                           0                                       
starkandwayne/concourse-tutorial                                                              0                                       

搜索的docker镜像如上所示。

下载镜像

镜像learn/tutorial下载

使用docker pull命令即可。在docker的镜像索引网站上面,镜像都是按照用户名/镜像名的方式来存储的。有一组比较特殊的镜像,比如ubuntu这类基础镜像,经过官方的验证,值得信任,可以直接用镜像名来检索到。[毕竟docker是在ubuntu环境下搞出来的]

现在,下载一个镜像——learn/tutorial:

[[email protected] docker]# docker pull learn/tutorial
Using default tag: latest
latest: Pulling from learn/tutorial
271134aeb542: Pull complete 
Digest: sha256:2933b82e7c2a72ad8ea89d58af5d1472e35dacd5b7233577483f58ff8f9338bd
Status: Downloaded newer image for learn/tutorial:latest

在容器中安装新的程序

接下来在容器中安装一个ping程序,上面步骤下载的tutorial镜像是基于ubuntu的,所以你可以使用ubuntu的apt-get命令来安装ping程序:apt-get install -y ping。

[[email protected] docker]# docker run learn/tutorial apt-get install -y ping
Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  iputils-ping
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 56.1 kB in 1s (44.7 kB/s)
Selecting previously unselected package iputils-ping.
(Reading database ... 7545 files and directories currently installed.)
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ...
Setting up iputils-ping (3:20101006-1ubuntu1) ...

备注:apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。

保存对容器的修改

当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。docker中保存状态的过程称之为committing,它保存的新旧状态之间的区别,从而产生一个新的版本。

那么如何保存对容器的更改?

首先使用如下命令获取安装完ping程序之后的容器id,然后将镜像改成learn/ping。

[[email protected] docker]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
48e55917cc57        learn/ping          "apt-get ......"    17 minutes ago      Exited (0) 17 minutes ago                       pedantic_zhukovsky
[[email protected] docker]# 

然后我们可以看到CONTAINER ID那一列的ID,类似于git提交一样,将之提交即可:

[[email protected] docker]# docker commit 48e55917cc57 learn/ping
sha256:95874dc21dd46feb028773097fd9fe76abc74718d1966bdc724d4d88ecb3fa4a

此时运行查看docker的镜像列表:

[[email protected] docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
learn/ping          latest              95874dc21dd4        33 minutes ago      140MB
hello-world         latest              fce289e99eb9        8 days ago          1.84kB
learn/tutorial      latest              a7876479f1aa        5 years ago         128MB

运行新的镜像

[[email protected] docker]# docker run learn/ping ping baidu.com
PING baidu.com (123.125.115.110) 56(84) bytes of data.
64 bytes from 123.125.115.110: icmp_req=1 ttl=127 time=52.5 ms
64 bytes from 123.125.115.110: icmp_req=2 ttl=127 time=51.5 ms
64 bytes from 123.125.115.110: icmp_req=3 ttl=127 time=55.1 ms
64 bytes from 123.125.115.110: icmp_req=4 ttl=127 time=52.3 ms
64 bytes from 123.125.115.110: icmp_req=5 ttl=127 time=50.9 ms
--- baidu.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 50.925/52.498/55.164/1.460 ms

检查运行中的镜像

技术分享图片

docker镜像其他常见操作

查看docker安装以及提交过的容器

[[email protected] docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        8 days ago          1.84kB
learn/tutorial      latest              a7876479f1aa        5 years ago         128MB

导出docker镜像

[[email protected] /]# docker image save hello-world > docker-hello-world.tar.gz
[[email protected] /]# ll
total 142756
lrwxrwxrwx.   1 root root         7 Nov  2 02:53 bin -> usr/bin
dr-xr-xr-x.   5 root root      4096 Nov  2 02:59 boot
drwxr-xr-x.  20 root root      3240 Jan  8 21:41 dev
-rw-r--r--.   1 root root     12800 Jan  9 06:30 docker-hello-world.tar.gz
-rw-r--r--.   1 root root 146142208 Jan  9 06:17 docker-learn-ping.tar.gz

删除docker镜像

[[email protected] system]# docker image rm -f learn/tutorial
Untagged: learn/tutorial:latest
Untagged: learn/[email protected]:2933b82e7c2a72ad8ea89d58af5d1472e35dacd5b7233577483f58ff8f9338bd

导入docker镜像

[[email protected] /]# docker image load -i docker-hello-world.tar.gz 
Loaded image: hello-world:latest

删除镜像还可以根据IMAGE ID来进行删除:

[[email protected] yum.repos.d]# docker rmi -f fce289e99eb9
Untagged: hello-world:latest
Untagged: hello-[email protected]:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
[[email protected] yum.repos.d]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              1a51cb5e3006        13 days ago         462MB
mysql               latest              102816b1ee7d        13 days ago         486MB
centos              latest              1e1148e4cc2c        5 weeks ago         202MB

配置Docker的镜像加速

有时候我们会发现镜像下载的特别慢,但是跟网络又没关系,这时候可以采用国内的镜像地址:

vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   

这样子就会使得镜像下载的速度加快。

镜像运行的状态

上面,我们简单介绍了如何运行一个镜像,现在docker的帮助命令进行一个说明:

[[email protected] yum.repos.d]# docker --help

Usage:    docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a containers changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a containers filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a containers filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run docker COMMAND --help for more information on a command.

当我们运行帮助命令的时候,我们会发现,类似linux的帮助命令,会罗列出一大堆的options和相关的命令。

比如这时候运行如下镜像:

[[email protected] ~]# docker run -d -p 80:80 nginx
Unable to find image nginx:latest locally
latest: Pulling from library/nginx
e7bb522d92ff: Pull complete 
6edc05228666: Pull complete 
cd866a17e81f: Pull complete 
Digest: sha256:285b49d42c703fdf257d1e2422765c4ba9d3e37768d6ea83d7fe2043dad6e63d
Status: Downloaded newer image for nginx:latest
8d8f81da12b5c10af6ba1a5d07f4abc041cb95b01f3d632c3d638922800b0b4d

run:表示创建并且运行一个容器。

-d:表示放入后台。

-p:表示端口映射。

nginx:表示镜像名称。

坚壁清野

以上是关于Docker镜像下载&Docker镜像操作常用命令的主要内容,如果未能解决你的问题,请参考以下文章

Docker第二章:docker基础1--镜像,容器&仓库

Docker基本管理(容器及镜像操作)

Docker基本管理(容器及镜像操作)

Docker&Kubernetes ❀ Docker镜像与容器相关操作基础命令详解

docker--镜像操作

Docker容器的基本操作