安装与启动

安装环境说明

Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。
我这里使用的是Centos7的版本。不建议使用Centos6的版本,因为安装前需要安装其他的环境和补丁,而且Docker很多不支持更新。

安装Docker

直接使用 yum 命令在线安装

yum install docker

LINUX centos7 已有docker环境导出 linux怎么用docker_redis


LINUX centos7 已有docker环境导出 linux怎么用docker_docker_02


LINUX centos7 已有docker环境导出 linux怎么用docker_docker_03

查看Docker版本
docker -v

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_04


可以看到版本为 1.12.6

Docker启动与停止常用命令

使用 systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。

  • 启动:systemctl start docker
  • 停止:systemctl stop docker
  • 重启:systemctl restart docker
  • 查看状态:systemctl status docker
  • 开机启动:systemctl enable docker
  • 查看概要:docker info
  • 帮助文件:docker --help

先查看一下我们的docker是否是运行状态

systemctl status docker

LINUX centos7 已有docker环境导出 linux怎么用docker_docker_05


如果能看到 active(running)就说明现在docker是启动状态。

Docker 镜像操作

什么是镜像

Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。

LINUX centos7 已有docker环境导出 linux怎么用docker_redis_06

列出所有的镜像

使用命令查看所有镜像 docker images

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_07


可以看到我目前有5个镜像。

这里解释一下表头

  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期,面是上传到远程镜像仓库的日期)
  • SIZE:镜像大小

注意:这里的镜像都是存在宿主机的 /var/lib/docker目录下。

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_08

为了区分同一个仓库下的不同镜像,Docker提供了一种称为标签(Tag)的功能。每个镜像在列出来时都带有一个标签,例如12.10、12.04等等。每个标签对组成特定镜像的一些镜像层进行标记(比如,标签12.04就是对所有Ubuntu12.04镜像层的标记)。这种机制使得同一个仓库中可以存储多个镜像。版本号。
我们在运行同一个仓库中的不同镜像时,可以通过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明从镜像Ubuntu:12.04启动一个容器,而这个镜像的操作系统就是Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。

搜索镜像
docker search 镜像名称

比如搜索 docker search tomcat

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_09

  • NAME:仓库名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

注意:搜索镜像必须要连网才能搜索得到,STARS最高的那个是官方发布的镜像,我们一般就下载第一个镜像即可

拉取镜像

从DockerHub摘取,官网 https://hub.docker.com/explore/

LINUX centos7 已有docker环境导出 linux怎么用docker_docker_10


Docker hub 最受欢迎的10大镜像。Nginx毫无疑问排名第一。

使用命令拉取

docker pull centos:7

目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。现有国内提供docker镜像加速服务的商家有不少,下面重点ustc镜像。
所以这里需要更改镜像地址,ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。地址:https://lug.ustc.edu.cn/wiki/mirrors/help/docker

接下来我需要修改文件将下载镜像地址配置进去。
1、进到 /etc/docker/daemon.json/文件里。如果文件不存在手动创建一个。在centos7下。通过vim,如果没有vim,yum install vim 装一下就好了。
2、daemon.json内容如下:

{
	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

3、重启docker服务,如果重启docker无法加速,可以重新启动OS

LINUX centos7 已有docker环境导出 linux怎么用docker_tomcat_11


4、通过 docker pull 命令下载镜像,速度非常快。

LINUX centos7 已有docker环境导出 linux怎么用docker_redis_12


可以看到这速度是不是非常快。

删除镜像
  • docker rmi IMAGE ID 删除指定镜像
  • docker rmi `docker images -q` 删除所有镜像

Docker 容器操作

查看容器
  • 正在运行的容器
docker ps
  • 查看所有容器(启动过的历史容器)
docker ps -a

LINUX centos7 已有docker环境导出 linux怎么用docker_tomcat_13

  • 查看停止的容器
docker ps -f status=exited
创建与启动容器

创建容器常用的参数说明

  • 创建容器命令:docker run
  • -i:表示运行容器
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • –name :为创建的容器命名。
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
交互式容器

创建一个交互式容器名为 mycentos

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

当输入命令之后,创建成功的话会进入到刚刚自己创建的容器里面。

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_14


我们可以新建一个容器查看容器状态,可以看到状态是 UP ,代表运行状态

LINUX centos7 已有docker环境导出 linux怎么用docker_docker_15


使用 exit 命令退出当前容器

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_16


可以看到容器状态也停止了 Exited

守护式容器

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复)

docker run -id --name=mycentos2 centos:7

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_17


可以看到输入一长串的字母加数字,这就是容器的ID。

进入守护式容器

docker exec -it container_name(或者 container_id) /bin/bash(exit 退出时,容器不会停止)

LINUX centos7 已有docker环境导出 linux怎么用docker_redis_18

停止与启动容器
  • 停止正在运行的容器:docker stop $CONTAINER_NAME | ID
docker stop mycentos2
  • 启动已运行过的容器:docker start docker start$CONTAINER_NAME | ID
docker start mycentos2

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_19

文件拷贝
  • 拷贝文件到容器内部
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp test.html mycentos2:/opt/

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_20

  • 将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp mycentos2:/opt/test.html cp_test.html

LINUX centos7 已有docker环境导出 linux怎么用docker_docker_21

目录挂载

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

  • 创建容器 添加 -v 参数 后边为 宿主机目录:容器目录
docker run -id -v /usr/local/html:/usr/local/container_html --name=mycentos3 centos:7

LINUX centos7 已有docker环境导出 linux怎么用docker_redis_22

  • 注意:如果你共享的是多级的目录,可能会出现权限不足的提示。
  • 这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
docker run -id -v /usr/local/html:/usr/local/container_html --name=mycentos3 --privileged=true centos:7
查看容器IP地址

使用 inspect查看,输入命令后直接拖到最后即可看到

docker inspect mycentos3

LINUX centos7 已有docker环境导出 linux怎么用docker_tomcat_23

  • 可以直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3

LINUX centos7 已有docker环境导出 linux怎么用docker_redis_24


个人觉得直接使用 inspect 会容易,直接输出IP会比较麻烦,而且容易打错。

删除容器
  • 删除指定容器:docker rm $CONTAINER_ID或NAME
docker rm mycentos

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_25

  • 删除所有容器:docker rm `docker ps -a -q`
docker rm `docker ps -a -q`

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_26

注意:看到上面删除只删除了一个,第二没有删除成功,原因是因为第二个容器在运行中,所以不能删除。删除之前一定要先停止容器。

应用部署

MySQL部署
1、拉取MySQL镜像
docker pull mysql

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_27


速度还是杠杠的

2、查看镜像

LINUX centos7 已有docker环境导出 linux怎么用docker_docker_28

3、创建MySQL容器
docker run -id --name=test_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_29

  • -p 代表端口映射,格式为 宿主机映射端口:容器运行端口
  • -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
4、进入MYSQL容器,我登陆MySQL

进入mysql容器,登录mysql

docker exec -it test_mysql /bin/bash
mysql -u root -p

LINUX centos7 已有docker环境导出 linux怎么用docker_redis_30


可以看到又是熟悉的界面。

5、远程登录MySQL

在Windows电脑上使用Navicat去连接Centos中的Docker容器里的Mysql,我这里IP为 192.168.60.128

  • 出现以下错误,原因是因为我自己的navicat版本不支持这种格式的密码,caching_sha2_password。具体解决办法请查看我这往篇文章 解决’caching_sha2_password连接问题
  • LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_31


  • 连接成功

注意:这里端口号是 33306,因为我们没办法连直接连接到容器的的mysql,给它映射一个tcp连接的33306端口,如果是云服务器需要通过 SSH 登录才能连接。

tomcat部署
1、拉取 tomcat 镜像
docker pull tomcat:7-jre7
2、创建 tomcat 容器
docker run -id --name=test_tomcat -p 9000:8080 -v /usr/local/html:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7
  • 这里 -v 指定映射目录,这样宿主机的html目录和webapps的目录同步
  • –privileged=true,是由于权限问题,前面提到过,这里就不多说了
3、cas单点登录应用部署

这里由于我自己在本地电脑上有一个单点登录的应用,就直接上传到 /usr/local/html目录即可。

  • 修改一个数据库连接配置即可
<!--自定义登录配置-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
	  p:driverClass="com.mysql.jdbc.Driver"  
	  p:jdbcUrl="jdbc:mysql://172.17.0.2:3306/pinyougoudb?characterEncoding=utf8"  
	  p:user="root"  
	  p:password="123456" />

注意这里连接的是刚刚创建的 test_mysql数据库,ip地址查询前端已经说过,直接 docker inspcte test_mysql就可以看到容器的IP地址。

Nginx部署
1、拉取 Nginx 镜像
docker pull nginx
2、创建 Nginx 容器
docker run -id --name=test_nginx -p 80:80 nginx

LINUX centos7 已有docker环境导出 linux怎么用docker_docker_32

3、测试 Nginx

浏览器输入IP地址:http://192.168.60.128/ ,可以看到熟悉的界面,就说明Nginx容器已经部署成功。

LINUX centos7 已有docker环境导出 linux怎么用docker_tomcat_33

4、配置反向代理

官方的nginx镜像,nginx配置文件nginx.conf 在/etc/nginx/目录下。
在容器内编辑配置文件不方便,我们可以先将配置文件从容器内拷贝到宿主机,编辑修改后再拷贝回去。
4.1、从容器拷贝配置文件到宿主机

docker cp test_nginx:/etc/nginx/nginx.conf nginx.conf

LINUX centos7 已有docker环境导出 linux怎么用docker_mysql_34


4.2、编辑 nginx.conf,添加反向代理配置

upstream tomcat-cas {
	server 172.17.0.3:8080;
}
server {
	listen 80;
	server_name cas.kyriecao.com;
	location / {
	    proxy_pass http://tomcat-cas;
	    index index.html index.htm;
	}
}
  • server 172.17.0.3:8080 对应的是 test_tomcat 的IP和端口

4.3、将修改后的配置文件拷贝到容器

docker cp nginx.conf test_nginx:/etc/nginx/nginx.conf

4.4、重新启动容器

docker restart test_nginx

4.5、配置虚拟主机,找到 C:\Windows\System32\drivers\etc\hosts文件添加配置

192.168.60.128 cas.kyriecao.com

4.6、浏览器测试就可以通过域名访问了,不过这个是虚拟的域名,只能在你本地访问

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_35

Redis部署
1、拉取 Redis 镜像
docker pull redis
2、创建 Redis 容器
docker run -id --name=test_redis -p 6379:6379 redis

LINUX centos7 已有docker环境导出 linux怎么用docker_nginx_36

3、客户端口连接测试

在 Windows版本下测试

redis-cli -h 192.168.60.128

LINUX centos7 已有docker环境导出 linux怎么用docker_tomcat_37

  • redis默认端口就是 6379 你可以不用指定端口也连接没问题,如果端口不是 6379则需要指定端口

镜像备份与迁移

1、容器保存为镜像
docker commit test_nginx test_nginx_black
  • test_nginx 是容器名称
  • test_nginx_black 是新的镜像名称
  • 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器
2、镜像备份
docker save -o test_nginx_black.tar test_nginx_black
  • -o 输出到文件
3、镜像恢复与迁移

不小心手抖了一下,把我们的 test_nginx_black 镜像删掉了,想恢复怎么办,执行下面命令进行恢复

docker load -i test_nginx_black.tar
  • -i 输入的文件

写这篇文章用了大概5个小时左右,虽然很枯燥、无味,最主要图多,截图截累了,不过收获挺大的,写完感觉很爽。写得不好的地方请指出。

================================================================================
感谢阅读,写得不好的地方请指教,能帮助到你是对我最好的回报,不卑不亢,加油。
请你记住比你优秀的一定比你努力,比你努力的人一定比你优秀。
================================================================================