Bootstrap

docker使用详解(包含安装,命令,镜像,持久化,dockerfile及常用安装)

一、Centos安装DOCKER

文档地址:https://docs.docker.com/install/linux/docker-ce/centos/

docker hub地址:https://hub.docker.com/_/centos/

前提条件

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

查看内核版本

[he@NginxTest ~]$ uname -r
3.10.0-862.el7.x86_64

查看centos版本

[he@NginxTest ~]$ cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 

安装

以下命令均为root权限执行。

如果之前安装过,先卸载旧版。

目录/var/lib/docker/的内容,包括镜像,容器,数据卷以及网络配置将被保留

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

1、安装 yum-utils , 使用 yum-config-manager 工具设置Yum源, 后面两个是 devicemapper驱动依赖

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

2、使用以下命令来添加docker的yum源。

官网命令(此处可能会报错 (原因是国内访问不到docker官方镜像的缘故)):

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

使用阿里镜像:

yum-config-manager \
	--add-repo \
	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装最新版本的Docker Engine-Community和containerd。

yum install docker-ce docker-ce-cli containerd.io

安装成功后,会创建一个用户组docker

4、启动docker

systemctl start docker

5、通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community 。

docker run hello-world

会报错,国外镜像仓库慢,跟maven一个道理,修改仓库地址,下一步讲的内容

配置镜像服务

登录阿里云,获取加速器地址

弹性计算–>容器镜像服务–>管理控制台–>镜像加速器

然后根据你的linux发行版查看对应操作文档,我的为Centos7,具体步骤如下:

在/etc/docker/daemon.json文件中修改配置,中括号里为加速器地址,如没有该文件,创建即可。

{
  "registry-mirrors": ["https://01k52ymj.mirror.aliyuncs.com"]
}

接着执行命令

# daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要使新服务的服务程序配置文件生效,需重新加载。
systemctl daemon-reload  --加载daemon.json
systemctl restart docker  --重启docker

操作完成以后再运行hello-world就能执行成功了,结果如下:

[root@NginxTest docker]# docker run hello-world
Unable to find image 'hello-world:latest' locally   --本地没有hello-world镜像
latest: Pulling from library/hello-world   --拉取镜像
1b930d010525: Pull complete 
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!  --输出
This message shows that your installation appears to be working correctly.   --此消息显示你的安装工作正常

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

二、DOCKER 命令

注意:镜像名称后面没加:TAG,即默认是最新版,为:latest

1、docker --help

帮助命令,会列出所有docker命令,查看具体一个命令的说明,使用docker command --help查看

2、docker images

列出本地主机上的镜像

语法
[root@NginxTest docker]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print images using a Go template
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs
  
  -a, --all             列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
      --digests         显示镜像的摘要信息
  -f, --filter filter   根据提供的条件过滤输出
      --format string
  	  --no-trunc        不截断输出,显示完整的镜像信息
  -q, --quiet	        只显示镜像ID
示例
[root@NginxTest docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        10 months ago       1.84kB

docker images -a
docker images -q
docker images -qa

第一行为表头,表头说明:

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

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。
如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像,即最新

2、docker search

从Docker Hub查找镜像

语法
[root@NginxTest ~]# docker search --help

Usage:  docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print search using a Go template
      --limit int       Max number of search results (default 25)
      --no-trunc        Don't truncate output
      
  -f, --filter filter   根据提供的条件过滤输出,比如点赞数过滤,-f=stars=30,过滤出点赞数大于30的,模式是-f=name=value
      --format string   
      --limit int       最大搜索结果数(默认为25)
      --no-trunc        不截断输出,显示完整的镜像信息
示例
docker search -f=stars=30 tocmat

补充:

如果docker search报错,报错信息如下:

[root@NginxTest /]# docker search mysql
Error response from daemon: Get https://index.docker.io/v1/search?q=mysql&n=25: dial tcp: lookup index.docker.io on 192.168.52.2:53: read udp 192.168.52.145:38063->192.168.52.2:53: i/o timeout

1、修改/etc/resolv.conf,把里面内容清除(我是把里面内容注释了),修改为:

nameserver 8.8.8.8
nameserver 8.8.8.4

然后重启网络服务即可

systemctl restart network

2、编辑/etc/docker/daemon.json文件,添加如下内容:

"dns": ["8.8.8.8", "8.8.4.4"]

3、docker pull

从镜像仓库中拉取或者更新指定镜像

[root@NginxTest ~]# docker pull --help

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
  -q, --quiet                   Suppress verbose output
  
  -a, --all-tags                下载存储库中的所有标记图像
      --disable-content-trust   跳过镜像验证
  -q, --quiet                   禁止详细输出
示例
# tomcat后没接:TAG,表示拉取最新版
docker pull tomcat

4、docker rmi

删除本地一个或多少镜像。

[root@NginxTest ~]# docker rmi --help

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images

Options:
  -f, --force      Force removal of the image
      --no-prune   Do not delete untagged parents
      
  -f, --force      强制删除镜像 
      --no-prune   不删除未标记的父级
;