Linux(Centos7)安装、使用 Docker

夙愿已清 提交于 2020-04-02 21:03:27

一、Linux(CentOS7) 上安装 docker

1、docker 是什么?

  docker 是一种 虚拟化容器技术,一个开源的应用容器引擎。
  基于镜像,可以秒级启动各种容器(运行一次镜像就生成一个容器,类似于 Java 中 类与对象)。
  各容器间相互隔离,且每个容器均是一个完整的运行环境。
  可以很方便的让开发者打包应用以及相关依赖包到一个可移植的轻量级的容器中,并发布到 Linux 上。
参考地址:
  https://www.cnblogs.com/l-y-h/p/11337051.html
  https://docs.docker.com/
  https://www.runoob.com/docker/docker-tutorial.html

 

2、安装

(1)官方文档地址:
  https://docs.docker.com/

(2)找到官方文档位置,根据文档一步步执行即可。
  Step1:进入官网,选择 Get Docker,并选择 Docker for Linux。

 

 

 

Step2:选择 相应的 Linux 系统,此处我选择 CentOS.

 

 

 

(3)安装流程
  Step1:卸载旧版本。
    查看当前系统是否有 docker 旧版本存在,存在则删除旧版本。

【方式一:(先查找是否存在,再删除)】
    rpm -qa | grep docker
    
【方式二:(直接删除,不管是不是存在,root 用户不需要输入 sudo)】
    sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 

 

 

  Step2:安装 Docker 仓库。
  使用 Docker 仓库进行安装,用来简化安装、升级等操作。也可采用 RPM 方式手动安装。
  所需软件包:
    yum-config-manager 需要 yum-util。
    device mapper 存储驱动程序 需要 device-mapper-persistent-data、 lvm2。

【安装所需软件包:(yum-utils、device-mapper-persistent-data、lvm2)】
    sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
      
【设置稳定的仓库(用于下载 docker):】
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

 

 

 

  Step3:安装社区版的 Docker(Docker Engine-Community)
    安装最新版本的 Docker Engine-Community 和 containerd.

【安装最新的 Docker:】
    sudo yum install docker-ce docker-ce-cli containerd.io
    
【查看当前版本,若有版本数据,则安装成功】
    docker -v

 

 

 

  Step4:启动 docker,并检查是否成功启动。

【启动、关闭 docker:(方式一)】
    sudo systemctl start docker
    sudo systemctl stop docker
    
【启动、关闭 docker:(方式二)】
    sudo service docker start
    sudo service docker stop
    
【检查是否启动成功:(方式一,查看本地镜像)】
    sudo docker images
    
【检查是否启动成功:(方式二,运行 hello-world 镜像)】
    sudo docker run hello-world

 

 

 

  Step5:设置开机自启动。
    每次开机都得重新输入命令用于启动 docker,很麻烦,所以一般设置开机自启动。

【查看是否开机自启动:】
    systemctl list-unit-files | grep enable
    或者
    systemctl list-unit-files | grep docker

【开机自启动:】
    sudo systemctl enable docker    

 

 

 

(4)配置镜像加速(此处使用 阿里云镜像)
    默认下载地址比较慢(dockerhub),使用镜像加速可以提高软件下载速度。
  Step1:登陆 阿里云官网,然后点击 控制台。

 

 

 

  Step2:进入控制台,点击列表框,选择产品服务中的 容器镜像服务。

 

 

 

  Step3:进入 容器镜像服务后,选择镜像加速器,按照步骤操作即可。

 

 

 

  Step4:配置镜像加速器。

【加速器地址:】
    https://y5krm9wr.mirror.aliyuncs.com

【修改配置文件:】
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://y5krm9wr.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker

 

 

 

二、常用命令 -- 镜像仓库管理相关命令

  用于从 远程镜像仓库下载镜像到本地。

1、docker pull(从镜像仓库中拉取指定的镜像)

【格式:】
    docker pull [选项] 镜像名[:版本号]
选项:
    -a      拉取所有镜像
注:
    :版本号 可以不存在,不存在时,获取最新的镜像。

【举例:】
    docker pull mysql:8.0.19

 

 

 

2、docker search(从 Dcoker Hub 中查找镜像)

【格式:】
    docker search [选项] 镜像名
选项:
    -s 指定数       显示 stars 不小于 指定数的镜像。

【举例:】
    docker search -s 20 mysql

 

 

 

三、常用命令 -- 本地镜像管理命令

  用于管理本地的镜像。

1、docker images(列出本地镜像列表)

【格式:】
    docker images [选项] [镜像名]
选项:
    -a          列出所有镜像
    -q          只显示镜像 ID(IMAGE ID)
    --no-trunc  显示完整的镜像信息
    --digests   显示镜像摘要信息

【举例:】 
    [root@localhost ~]# docker images mysql
    [root@localhost ~]# docker images --no-trunc

 

 

 

2、docker rmi(删除镜像)

【格式:】
    docker rmi [选项] 镜像名
选项:
    -f    强制删除
    
【举例:】
    docker rmi tomcat

 

 

 

3、docker tag(标记本地镜像,将其归入某个仓库)

  相当于一个镜像的不同名字。

【格式:】
    docker tag 原镜像名 新镜像名
    
【举例:】
    [root@localhost ~]# docker tag tomcat:latest mytomcat 

 

 

 

四、常用命令 -- 管理容器的生命周期命令

  运行一个镜像,就可以生成一个 容器,容器内部是一个完整的运行环境。
  一个镜像可以生成多个容器,类似于 Java 中 类 与 对象的关系。
  需要对各个容器进行管理。

1、docker run(创建一个容器并运行)

【格式:】
    docker run [选项] 镜像文件名
选项:
    -d              指在后台运行容器,返回容器 ID。
    -i              以交互模式运行容器,通常与 -t 连用(即 -it)。
    -t              为容器分配一个伪输入终端。
    -P              随机端口映射,将容器内部端口随机映射到主机的端口
    -p              指定端口映射,将容器内部端口映射到主机指定端口,格式:-p 主机端口:容器端口
    --name          指定启动容器的名字,格式: --name 容器名
    -e             指定环境变量,格式:-e 环境变量名=环境变量值
    -v             文件挂载,将容器内部文件与主机文件绑定,格式 -v 主机文件路径:容器文件路径
    
【举例:】
    docker run --name mysqlDemo -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:8.0.19
上面命令为:
    docker run mysql:8.0.19            执行 mysql:8.0.19 版本的镜像,生成一个容器
    --name mysqlDemo                   容器命名为 mysqlDemo
    -d                                 后台运行
    -e MYSQL_ROOT_PASSWORD=123456      设置登陆密码为 123456,登陆用户为 root
    -p 3306:3306                       将容器内部 3306 端口映射到 主机的 3306 端口,即通过 主机的 3306 可以访问容器的 3306 端口

 

 

 

2、docker start/stop/restart(启动、关闭、重启容器)

【docker start 格式:】
    docker start 容器名
    
【docker stop 格式:】
    docker stop 容器名
    
【docker restart 格式:】
    docker restart 容器名
    
【举例:】
    [root@localhost ~]# docker stop mysql

 

 

 

3、docker kill(杀掉一个正在运行的容器)

【格式:】
    docker kill [选项] 容器名
选项:
    -s     向容器发送一个信号

【举例:】
    [root@localhost ~]# docker kill mysqlDemo

 

 

 

4、docker rm(删除容器)

【格式:】
    docker rm [选项] 容器名
选项:  
    -f          强制删除一个运行中的容器
    -v          删除与容器相关联的 卷
    
【举例:】
     [root@localhost ~]# docker rm -f mysqlDemo 

 

 

 

5、docker create(创建一个容器,但不启动容器)

【格式:】
    docker create [选项] 镜像名
选项基本与 docker run 一样(没有 -d)。

【举例:】
    [root@localhost ~]# docker create --name mysqlDemo1  -e MYSQL_ROOT_PASSWORD=123456 -p 3312:3306 mysql:8.0.19

 

 

 

6、docker exec(在运行的容器中执行命令)

【格式:】
    docker exec [选项] 容器名 命令
选项:
    -d              以分离模式在后台运行。
    -i              以交互模式运行容器,通常与 -t 连用(即 -it)。
    -t              为容器分配一个伪输入终端。

【举例:】
    [root@localhost ~]# docker exec -it mysql /bin/bash

 

 

 

五、常用命令 -- 查看容器信息命令

1、docker ps(查看当前容器列表)

【格式:】
    docker ps [选项]
选项:
    -a           显示所有容器,包括未运行的容器
    -l           显示最近创建的容器
    -n 指定数     显示最近创建的 指定数 的容器。比如: -n 7,显示最近创建的 7 个容器
    -q           只显示容器 ID
    
【举例:】
    [root@localhost ~]# docker ps -an 10

 

 

 

2、docker top(查看容器中运行的进程信息)

【格式:】
    docker top 容器名

【举例:】
    [root@localhost ~]# docker top mysql

 

 

 

3、docker logs(获取容器的日志)

【格式:】
    docker logs [选项] 容器名
选项:
    -f          跟踪日志输出
    --tail      显示最新的 n 条日志,格式: --tail=指定数
    -t          显示时间戳

【举例:】
    [root@localhost ~]# docker logs --tail=10 mysql

 

 

 

4、docker port(查看映射端口)

【格式:】
    docker port 容器名
    
【举例:】
    docker port mysql

 

 

 

5、docker info(显示 docker 系统信息)

【格式:】
    docker info

【举例:】
    [root@localhost ~]# docker info

 

 

 

6、docker version、docker -v(显示 docker 版本信息)

【格式:】
    docker version
    docker -v

【举例:】
    [root@localhost ~]# docker version
    [root@localhost ~]# docker -v

 

 

 

六、Docker 上安装 mysql 8.0.19 镜像

1、查找 想要安装的 mysql 版本

【方式一:官网搜索】
    https://hub.docker.com/
    https://hub.docker.com/_/mysql?tab=tags
    
【方式二:(通过命令行查询)】
    docker search mysql

 

 

 

 

 

 

2、下载镜像

  通过官网地址,可以查看到 想要下载的版本,使用 pull 命令拉取镜像即可.
  此处我选择 8.0.19 版本的 mysql。
  如果没有 设置版本,则会自动下载最新的版本(即 docker pull mysql 会下载最新的版本 latest)。

【命令行下载:】
    docker pull mysql:8.0.19
    
【查看镜像是否成功下载:(即查看本地镜像)】
    docker images

 

 

 

3、运行容器

【运行容器:】
    docker run -p 3306:3306 --name mysql \
    -v /usr/mydata/mysql/log:/var/log/mysql \
    -v /usr/mydata/mysql/data:/var/lib/mysql \
    -v /usr/mydata/mysql/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d mysql:8.0.19
    
分析:
    docker run -d mysql:8.0.19             以后台的方式运行 mysql 8.0.19 版本的镜像,生成一个容器。
    --name mysql                           容器名为 mysql
    -e MYSQL_ROOT_PASSWORD=123456          设置登陆密码为 123456,登陆用户为 root
    -p 3306:3306                           将容器内部 3306 端口映射到 主机的 3306 端口,即通过 主机的 3306 可以访问容器的 3306 端口
    -v /usr/mydata/mysql/log:/var/log/mysql    将容器的 日志文件夹 挂载到 主机的相应位置
    -v /usr/mydata/mysql/data:/var/lib/mysql   将容器的 数据文件夹 挂载到 主机的相应位置
    -v /usr/mydata/mysql/conf:/etc/mysql/conf.d   将容器的 自定义配置文件夹 挂载到主机的相应位置
    
【查看容器是否启动:】
    docker ps -a

 

 

 

 

 

 

4、使用

【本机使用:(使用交互式方式进入)】
    docker exec -it mysql /bin/bash
    
【外部访问:(访问主机的 3306 端口即可)】
    ifconfig 可以查看 主机的 ip 地址(比如连接 :192.168.217.129:3306)

 

 

 

 

 

 

5、修改配置文件(比如修改默认字符集)

  在启动过程中,已经将 /etc/mysql/conf.d 挂载到了 /usr/mydata/mysql/conf 上,所以在 /usr/mydata/mysql/conf 目录下 新建一个 my.cnf 文件,并添加配置信息,即可修改 mysql 容器的配置。

【查看 当前 mysql 的字符集:】
    show variables like "%character%";

初始字符集。

 

 

创建 /mydata/mysql/conf/my.cnf ,并重启容器。

 

 

【在 /mydata/mysql/conf 下新建一个 my.cnf 文件】
    [client]
    # 设置字符集为 utf-8
    default-character-set=utf8
    
    [mysql]
    # 设置字符集为 utf-8
    default-character-set=utf8
    
    [mysqld]
    # 设置登陆用户
    # user=root
    # 设置字符集编码为 utf-8
    character-set-server=utf8

【重启容器】
    docker restart mysql

 

 

 

七、Docker 安装 Redis

1、查找需要安装的镜像

【方式一:官网搜索】
    https://hub.docker.com/
    https://hub.docker.com/_/redis?tab=tags
    
【方式二:(通过命令行查询)】
    docker search redis

 

 

 

2、下载镜像

【下载最新的镜像:】
    docker pull redis

 

 

 

3、运行容器

【运行容器:】
使用 docker run -v 挂载文件时,若想挂载文件,需要先在主机上创建文件,否则会当成目录挂载。
    mkdir -p /usr/mydata/redis/conf
    touch /usr/mydata/redis/conf/redis.conf

由于 使用空白文件 替换了 redis.conf ,会无法正常启动,需要使用 redis-server /etc/redis/redis.conf 指定配置文件启动 redis。
    docker run -p 6379:6379 --name redis \
     -v /usr/mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
     -v /usr/mydata/redis/conf/data:/data \
     -d redis redis-server /etc/redis/redis.conf 
     
分析:
    docker run -d redis   运行 redis 最新镜像,并生成一个容器
    --name redis          容器名为 redis
    -p 6379:6379          指定端口映射,容器的 6379 端口映射到 主机的 6379 端口,
    -v /usr/mydata/redis/conf/redis.conf:/etc/redis/redis.conf   挂载 redis 的配置文件到主机的指定位置
    -v /usr/mydata/redis/conf/data:/data   挂载 redis 的数据到主机的指定位置
    redis-server /etc/redis/redis.conf    表示根据 /etc/redis/redis.conf 配置文件启动。

 

 

 

4、使用

【使用交互式方式进入 redis 容器】
    docker exec -it redis /bin/bash
    
【使用交互式方式 打开 redis-cli】
    docker exec -it redis redis-cli

 

 

 

5、修改配置文件(比如数据持久化)

  使用默认配置文件启动 redis 时,数据不会持久化(即 appendonly = no)。
  当 redis 重启后,数据就会丢失。

 

 

修改配置文件,添加数据持久化(即 appendonly = yes)。

【编辑 /usr/mydata/redis/conf/redis.conf】
    vim /usr/mydata/redis/conf/redis.conf

    appendonly yes

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!