一、安装docker
1、卸载旧版本的docker
命令:sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2、安装所需的软件包 yum-utils, yum-utils 提供了 yum-config-manager,并且 devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2
命令:yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置Docker的镜像仓库
命令:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装最新版本的docker ce
命令:yum install docker-ce
5、卸载docker软件包
命令:yum remove docker-ce
注意:docker安装需要当前的linux系统的内核版本高于3.10,所以在安装之前先查看一下linux系统的内核版本,查看linux内核版本的命令:uname -r

二、docker的常用命令

1、启动docker: systemctl start docker

2、停止docker: systemctl stop docker

3、重启docker: systemctl restart docker

4、查看docker状态: systemctl status docker

5、开机自动启动docker: systemctl enable docker

6、查看当前安装的 Docker 版本:docker version

7、查看 docker 帮助命令: docker --help

8、查看 docker 概要信息: docker info

9、从Docker Hub拉取镜像,命令格式:docker pull 镜像名:标签名

例如:docker pull mysql:5.6

10、列出docker下的已安装所有镜像:docker images

docker安装linux镜像作用 docker镜像中安装yum命令_mysql


REPOSITORY:镜像所在仓库的名称

TAG:镜像标签(一般是版本号)

IMAGE ID:镜像ID

CREATED:镜像的创建日期

SIZE:镜像大小

11、只显示镜像ID:docker images -q

12、搜索镜像,命令格式:docker search + 镜像名称

例如:docker search centos

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_02


13、重载docker的daemon.json(配置docker镜像加速器)配置文件:systemctl daemon-reload

14、删除某一个镜像:docker rmi 镜像ID

docker安装linux镜像作用 docker镜像中安装yum命令_linux_03


15、获取所有镜像id:docker images -q

16、删除所有镜像 (是 `` 反单引号 ):docker rmi docker images -q三、docker容器操作常用命令

1、查看正在运行容器:docker ps

2、查看所有的容器(启动与未启动的容器):docker ps -a

3、查询所有运行过的容器ID:docker ps -a -q

4、查看最后一次运行的容器:docker ps –l

5、查看停止的容器:docker ps -f status=exited

6、创建容器,命令格式:docker run [OPTIONS] 镜像名:标签名

创建容器 [OPTIONS] 常用的参数说明:

-i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器 ),通常与 -t 同时使用 。

-t 启动后会进入其容器命令行, 通常与 -i 同时使用; 加入 -it 两个参数后,容器创建就能登录进去。即

分配一个伪终端。

–name 为创建的容器指定一个名称 。

-d 创建一个守护式容器在后台运行,并返回容器ID;

这样创建容器后不会自动登录容器,如果加 -i 参数,创建后就会运行容器。

-v 表示目录映射, 格式为: -p 宿主机目录:容器目录

注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-p 表示端口映射,格式为: -p 宿主机端口:容器端口

例如:创建一个交互式容器并取名为 mycentos , ( /bin/bash 是linux中的命令解析器,会进入到容器里面命令行)

命令:docker run -it --name=mycentos centos:7 /bin/bash

PS:交互式容器:就是创建容器后,马上会启动容器,并进入容器

PS:守护式容器:后台运行的容器,创建后不会马上进入容器内部,需要通过 docker exec 命令进入

例一:创建交互式容器

docker安装linux镜像作用 docker镜像中安装yum命令_容器_04


例二:创建守护式容器

docker安装linux镜像作用 docker镜像中安装yum命令_linux_05


7、退出并停止当前容器, 注意在容器内部的命令行执行:exit

PS:exit 针对通过 docker exec 进入的容器,只退出但不停止容器

8、退出但不停止当前容器(按快捷键,多按几次): Ctrl + p + q

9、进入正在运行的容器:docker exec -it 容器名称(或容器id) /bin/bash

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_06


PS通过 docker exec 命令进入正在运行的容器后,使用 exit 命令退出容器,不会结束该容器,也就是 exit 后该容器还是正常运行状态,但是如果是创建容器的时候就进入容器了(也就是创建交互式的容器),此时使用 exit 命令不仅仅是退出了该容器,也结束了该容器。

10、启动容器:docker start 容器名称|容器id

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_07


11、启动所有运行过的容器(注意:反单引号):docker start docker ps -a -q

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_08


12、停止正在运行的容器:docker stop 容器名称|容器id

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_09


13、停止所有在运行的容器:docker stop docker ps -a -q

docker安装linux镜像作用 docker镜像中安装yum命令_容器_10

14、强制停止正在运行的容器(一般不用此,除非卡了):docker kill 容器名称|容器id

docker安装linux镜像作用 docker镜像中安装yum命令_linux_11


15、将宿主机文件拷贝到容器内:docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录

docker安装linux镜像作用 docker镜像中安装yum命令_容器_12


16、将容器内部的文件拷贝到宿主机:docker cp 容器名称:要拷贝的容器文件或目录 宿主机文件或目录

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_13


17、数据目录挂载:docker run -id -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名

需求:将宿主机的/opt目录与容器内的/opt目录进行映射,当在宿主机 /opt 目录下创建一个文件 test.txt ,这个 test.txt 会自动同步到容器映射目录 /opt

实现:创建容器时,将 宿主机目录/opt 挂载 容器目录/opt

docker安装linux镜像作用 docker镜像中安装yum命令_docker_14

PS:数据目录挂载:我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

18、目录挂载只读(Read-only)权限:docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_15


19、查看容器运行内部细节,比如可看容器的IP:docker inspect 容器名|容器id

docker安装linux镜像作用 docker镜像中安装yum命令_docker_16


20、查看容器IP地址:docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名|容器id

docker安装linux镜像作用 docker镜像中安装yum命令_容器_17


21、删除指定的容器:docker rm 容器名称 | 容器ID

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_18


22、删除所有容器(其中运行中的容器无法删除,所以先停再删):docker rm docker ps -a -q

docker安装linux镜像作用 docker镜像中安装yum命令_docker_19


四、实战部署

1、MySQL部署

1.1、拉取MySQL镜像:docker pull mysql:5.7

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_20


1.2、创建 MySQL 容器:docker run -id --name=docker_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_21


-p 代表端口映射,格式为 宿主机映射端口:容器运行端口

-e 代表添加环境变量, MYSQL_ROOT_PASSWORD 是 root 用户的登陆密码

PS:此处的 33306 端口是宿主机对应的端口,如果没有开通此端口,后面 1.4 步骤的时候是无法连接到 mysql 的,需要开通防火墙开放此端口;后面的 3306 端口是容器 docker_mysql 的运行端口,其实也就是 mysql 的默认端口。

1.3、进入MySQL容器, 登陆MySQL:docker exec -it docker_mysql /bin/bash

docker安装linux镜像作用 docker镜像中安装yum命令_docker_22


1.4、远程登陆MySQL

docker安装linux镜像作用 docker镜像中安装yum命令_linux_23


1.5、连接上 mysql 之后,就可以正常去建库建表了2、Redis 部署

2.1、拉取Redis镜像:docker pull redis

docker安装linux镜像作用 docker镜像中安装yum命令_linux_24


2.2、创建Redis容器:docker run -id --name=docker_redis -p 6379:6379 redis

PS:前面一个6379是docker所在服务器的映射端口,后面一个6379是redis容器的运行端口

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_25


2.3、使用本机的 Redis 图形化工具 Redis Desktop Manager 连接刚才创建 redis 容器

docker安装linux镜像作用 docker镜像中安装yum命令_linux_26

3、Tomcat 部署

3.1、拉取tomcat镜像:docker pull tomcat:8

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_27

3.2、创建tomcat容器:docker run -id --name=mxg_tomcat -p 8888:8080 -v /usr/local/project:/usr/local/tomcat/webapps --privileged=true tomcat:8

-p 表示地址映射, 宿主机端口号:容器运行端口号

-v 表示地址映射, 宿主机目录:容器映射目录

–privileged=true 如果映射的是多级目录,防止有可能会出现没有权限的问题,所以加上此参数

docker安装linux镜像作用 docker镜像中安装yum命令_docker_28


3.3、进入Tomcat容器,在容器中同步 hello.html 文件

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_29


3.4、启动容器:docker start docker_tomcat

docker安装linux镜像作用 docker镜像中安装yum命令_容器_30


3.5、浏览器访问 tomcat 中的 hello.html 页面

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_31


PS:47.103.16.47是宿主机ip,8888是宿主机映射的端口,对应tomcat容器的运行端口8080四、容器的备份与迁移

1、查看容器是否有挂载目录:docker inspect --format=’{{.Mounts}}’ 容器名

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_32


2、将容器保存为镜像

容器无挂载目录时保存为镜像:docker commit 容器名 新的镜像名:TAG

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_33


容器有挂载目录时保存为镜像:

问题: 如果Docker对容器挂载了数据目录, 在将容器保存为镜像时,数据不会被保存到镜像中。

**原因:**因为宿主机与容器做了路径映射,再commit一个新的镜像时,该路径下的所有数据都会被抛弃,不会被保存到新镜像中。可通过 docker inspect --format=’{{.Mounts}}’ 镜像名 查看是否有目录挂载.

解决:

**目录挂载方法:**先把在宿主机的数据备份在某个目录下,在 docker run 的时候使用-v参数将宿主机上的

目录映射到容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )

**拷贝方法:**先把在宿主机的数据备份在某个目录下,通过拷贝的方法 docker cp 将备份的数据复制进容

器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )。

目录挂载方法如下:

docker安装linux镜像作用 docker镜像中安装yum命令_docker_34


拷贝方法如下:

docker安装linux镜像作用 docker镜像中安装yum命令_docker_35


docker安装linux镜像作用 docker镜像中安装yum命令_docker_36


3、备份镜像:docker save -o 包名.tar 镜像名:标签

docker安装linux镜像作用 docker镜像中安装yum命令_docker_37


4、恢复镜像:docker load -i 镜像备份的包名

docker安装linux镜像作用 docker镜像中安装yum命令_docker安装linux镜像作用_38

五、通过 Dockerfile 构建镜像

实例:通过 Dockerfile 构建 jdk 镜像

方式一:

docker安装linux镜像作用 docker镜像中安装yum命令_linux_39


方式二:

docker安装linux镜像作用 docker镜像中安装yum命令_mysql_40