Docker
1、简介
Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。
![](/images/01.png)
![](/images/02.png)
2、核心概念
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker守护进程(daemon): 一般在宿主主机后台运行,等待接收来自客户端的消息。
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
![](/images/03.png)
使用Docker的步骤:
1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止。
3、安装Docker
1)、安装linux虚拟机
1)、VMWare(教程使用)、VirtualBox;
2)、导入虚拟机文件centos7.ova;
(1)、首先点击“打开虚拟机:
![](/images/04.png)
(2)、选择虚拟机文件centos7.ova后点击“打开”:
![](/images/05.png)
(3)、新虚拟机名称和存储路径可以自行修改,点击“导入”:
![](/images/06.png)
(4)、系统可能会跳出错误提示,直接点击“重试,等待导入完成:
![](/images/07.png)
(5)、导入成功后,选择该虚拟机,点击菜单栏的”编辑“--”虚拟网络编辑器“:
![](/images/08.png)
(6)、选择VMNET0--桥接模式--选择当前电脑连接互联网使用的网卡后点击”确定“:
![](/images/09.png)
3)、双击启动linux虚拟机;使用 root/ 123456登陆
4)、查看linux的ip地址
```shell
$ ip addr /ifconfig
```
8)、使用客户端连接linux(SecureCRT);
(1)、输入主机名(ip地址)用户名(root)后点击”连接“:
![1561187488117](/images/10.png)
(2)、点击”接受并保存“:
![1561187619348](D:\course\docker\document\images\11.png)
(3)、输入密码123456:
![1561187749770](/images/12.png)
2)、在linux虚拟机上安装docker
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。
社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。
社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。
**安装步骤:**
1、Docker 要求 CentOS 系统的内核版本高于 3.10 。
通过 **uname -r** 命令查看当前的内核版本
```shell
[root@localhost ~]#uname -r
```
2、使用 `root` 权限登录 Centos。确保 yum 包更新到最新。
```shell
[root@localhost ~]#sudo yum update
```
3、卸载旧版本(如果安装过旧版本的话)
```shell
[root@localhost ~]#sudo yum remove docker docker-common docker-selinux docker-engine
```
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
```shell
[root@localhost ~]#sudo yum install -y yum-utils device-mapper-persistent-data lvm2
```
5、设置yum源
```shell
[root@localhost ~]#sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
这个源是国外网站的,有可能会很慢,可以改成阿里云提供的镜像,二者执行一个即可:
[root@localhost ~]#sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
```
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
```shell
[root@localhost ~]#yum list docker-ce --showduplicates | sort -r
```
![1561189409185](/images/13.png)
7、安装docker
```shell
[root@localhost ~]#sudo yum install docker-ce #这里安装的是最新稳定版18.09.6
[root@localhost ~]#sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.1.ce
```
8、启动并加入开机启动
```shell
[root@localhost ~]#sudo systemctl start docker
[root@localhost ~]#sudo systemctl enable docker
```
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
```shell
[root@localhost ~]#docker version
```
![1561189892227](/images/14.png)
10、停止docker
```shell
[root@localhost ~]#sudo systemctl stop docker
```
4、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/
2)、容器操作
软件镜像(QQ安装程序)----运行镜像----产生一个容器(正在运行的软件,运行的QQ);
步骤:
```shell
1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、查看运行中的容器
[root@localhost ~]# docker ps
5、停止运行中的容器
[root@localhost ~]# docker stop 容器的id
6、查看所有的容器
[root@localhost ~]# docker ps -a
7、启动容器
[root@localhost ~]# docker start 容器id
8、删除一个容器
[root@localhost ~]# docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container-name/container-id
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
可以参考每一个镜像的文档
```
3)、安装MySQL示例
```shell
docker pull mysql
```
错误的启动
```shell
[root@localhost ~]# docker run --name mysql01 -d mysql
f077e80f0b5463d7680413c91bf11265e3ad2b6e66f932977535057fc517381a
mysql退出了
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f077e80f0b54 mysql "docker-entrypoint.sh" 34 seconds ago Exited (1) 33 seconds ago mysql01
//错误日志
[root@localhost ~]# docker logs f077e80f0b54
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个
```
正确的启动
```shell
[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d177d6518a6 mysql "docker-entrypoint.sh" 4 seconds ago Up 3 seconds 3306/tcp mysql01
```
做了端口映射
```shell
[root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
b931bbc89831306645910006ef55407d85ead7f0db763778240529f9d3cfc578
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b931bbc89831 mysql "docker-entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql02
```