Linux(CentOS7)安装Docker,镜像拉取、使用及常用操作

 一、简介

  Docker是一个开源的应用容器引擎;是一个轻量级容器技术; Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使 用这个镜像; 运行中的这个镜像称为容器,容器启动是非常快速的。

  Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。

二、核心概念

  docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上); docker客户端(Client):连接docker主机进行操作; docker仓库(Registry):用来保存各种打包好的软件镜像; docker镜像(Images):软件打包好的镜像;放在docker仓库中; docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用

 

 使用Docker的步骤:
1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止;

三、安装docker

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

 $ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

$ sudo yum update

3、卸载旧版本(如果安装过旧版本的话)

$ sudo yum remove docker  docker-common docker-selinux docker-engine

4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

5、设置yum源

//阿里源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
//稳定源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

 6、可以查看所有仓库中所有docker版本,并选择特定版本安装

$ yum list docker-ce --showduplicates | sort -r

7、安装docker

$ sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN>  # 例如:sudo yum install docker-ce-17.12.0.ce

 

8、启动Docker并加入开机启动

$ sudo systemctl start docker
$ sudo systemctl enable docker

9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

$ docker version

 问题

1、因为之前已经安装过旧版本的docker,在安装的时候报错如下:

Transaction check error:
  file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
  file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

2、卸载旧版本的包

$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

3、再次安装docker

$ sudo yum install docker-ce

四、Docker仓库

Docker常用命令&操作

1)、镜像操作

操作命令说明
检索 docker search 关键字 eg: docker search redis 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。
拉取 docker pull 镜像名:tag :tag是可选的,tag表示标签,多为软件的版本,默认是latest
列表 docker images 查看所有本地镜像
删除 docker rmi image-id 删除指定的本地镜像

https://hub.docker.com/

搜索对于的镜像名,可以查看镜像的TAG

  1. //docker hub地址,如果有特殊需要可以这里查询版本tag
  2. https://hub.docker.com/r/library/
     
     
     
     
     
     

1、拉取镜像,此处举例httpd,镜像的ID唯一标识了镜像,如果ID相同,说明是同一镜像。TAG信息来区分不同发行版本,如果不指定具体标记,默认使用latest标记信息

  1.  
    //默认下载latest版本
  2.  
    docker pull httpd
  3.  
     
  4.  
    //如果需要特殊版本则加上需要的tag
  5.  
    docker pull redis:5.0.5-alpine3.10
  6.  
     
  7.  
    //docker hub地址,如果有特殊需要可以这里查询版本tag
  8.  
    https://hub.docker.com/r/library/

2、查看镜像,可以发现httpd已经拉取成功

docker images

3、创建一个容器并运行,将容器命名为dockerhttpd ,并把80端口映射到宿主机的8080端口,宿主机的目录/dockerdata/httpd挂载到容器的/var/www/httpd/

docker run -it -d -p 8080:80 --name dockerhttpd -v /dockerdata/httpd:/var/www/httpd/ httpd

参数说明如下:

    -i:以交互模式运行容器,通常与-t同时使用。
    -t:为容器重新分配一个伪输入终端,通常与-i同时使用。
    -d:后台运行容器,并返回容器ID。
    -p:端口映射,格式为“宿主机端口:容器端口”。
    --name:为容器指定一个名称。
    -v:把宿主机上的一个目录挂载到镜像里,格式为“宿主机目录:镜像内挂载的路径”,必须为绝对路径。

五、安装MySQL示例

docker pull mysql

 错误的启动

  1.  
    [root@localhost ~]# docker run ‐‐name mysql01 ‐d mysql
  2.  
    42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846
  3.  
     
  4.  
    mysql退出了
  5.  
    [root@localhost ~]# docker ps ‐a
  6.  
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS PORTS               NAMES
  7.  
    42f09819908b        mysql               "docker‐entrypoint.sh"   34 seconds ago      Exited 
  8.  
    (133 seconds ago                            mysql01
  9.  
    538bde63e500        tomcat              "catalina.sh run"        About an hour ago   Exited 
  10.  
    (143) About an hour ago                       compassionate_
  11.  
    goldstine
  12.  
    c4f1ac60b3fc        tomcat              "catalina.sh run"        About an hour ago   Exited 
  13.  
    (143) About an hour ago                       lonely_fermi
  14.  
    81ec743a5271        tomcat              "catalina.sh run"        About an hour ago   Exited 
  15.  
    (143) About an hour ago                       sick_ramanujan
  16.  
     
  17.  
     
  18.  
    //错误日志
  19.  
    [root@localhost ~]# docker logs 42f09819908b
  20.  
    error: database is uninitialized and password option is not specified 
  21.  
      You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and 
  22.  
    MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个

正确的启动

  1.  
    [root@localhost ~]# docker run ‐‐name mysql01 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
  2.  
    b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
  3.  
    [root@localhost ~]# docker ps
  4.  
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS   
  5.  
               PORTS               NAMES
  6.  
    b874c56bec49        mysql               "docker‐entrypoint.sh"   4 seconds ago       Up 3 
  7.  
    seconds        3306/tcp            mysql01

几个其他的高级操作

  1.  
    docker run ‐‐name mysql03 ‐v /conf/mysql:/etc/mysql/conf.d ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw 
  2.  
    ‐d mysql:tag
  3.  
    把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
  4.  
    改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
  5.  
     
  6.  
    docker run ‐‐name some‐mysql ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw ‐d mysql:tag ‐‐character‐set‐
  7.  
    server=utf8mb4 ‐‐collation‐server=utf8mb4_unicode_ci
  8.  
    指定mysql的一些配置参数
  1.  
    //docker hub地址,如果有特殊需要可以这里查询版本tag
  2.  
    https://hub.docker.com/r/library/
原文地址:https://www.cnblogs.com/dingjiaoyang/p/13503651.html