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/


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM