Docker
一、Docker简介
1.1 什么是 Docker
Docker 是一个开源的应用容器引擎。Docker 的主要目标是“Build,Ship and Run Any App,Anywhere”,通过对应应用组件的封装、发布、部署、运行等生命周期的管理,使用户的 APP 以及其运行环境能够做到“一次封装,到处运行”
Docker应用场景
- Web 应用的自动化打包和发布
- 自动化测试和持续集成、发布
- 在服务型环境中部署和调整数据库或其他的后头应用
1.2 Docker 组件
Docker 是一个客户端-服务端(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
名称 | 说明 |
---|---|
Docker 镜像(Images) | Docker 镜像是用于创建 Docker 容器的模板。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来 |
Docker 容器(Container) | 容器是独立运行的一个或一组应用。 |
Docker 客户端 | Docker 客户端通过命令行或其他工具使用 Docker API 与 Docker 的守护进程通信 |
Docker 主机(Host) | 一个物理或虚拟的机器用于执行 Docker 守护进程和容器 |
Docker 守护进程 | 是 Docker 服务器端进程,负责支撑 |
Docker 仓库DockerHub(Registry) | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub 提供了庞大的镜像集合供使用。用户可以将自己本地的镜像推送到 Docker 仓库供其他人下载 |
镜像和容器的关系:就像面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
二、Docker 安装与启动
2.1 安装 Docker
-
yum 包更新到最新
sudo yum update
-
安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
-
设置 yum 源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装 Docker
sudo yum install docker-ce
-
安装后产看 Docker 版本
docker -v
2.2 设置 ustc 的镜像
ustc 的 docker 镜像加速器很快。ustc docker mirror 的优势之一就是不需要注册,是真正的公共服务
编辑该文件:vi /etc/docker/daemon.json
在该文件下输入如下内容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
保存退出esc
然后:wq
2.3 Docker 的启动与停止
systemctl 命令是系统服务管理器指令
启动 docker:
systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看 docker状态
systemctl status docker
开机启动:
systemctl enable docker
查看 docker 概要信息
docker info
查看 docker 帮助文档
docker --help
指令介绍:
cp:本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝
exec:登录一个容器,使用命令行操作正在运行的容器。
images:镜像的集合查询。
ps:容器列表
pull:下载镜像
restart:重启一个或多个容器
rm:删除一个或多个容器
rmi:删除一个或多个镜像
run:创建一个容器,并运行起来
save:导出镜像到一个文件(tar)中
search:搜索镜像(从Docker Hub)
start:启动一个或多个已经停止的容器
restart:重启动一个或多个已经停止的容器
stop:停止一个或多个正在运行的容器
三、常用命令
3.1.1 查看镜像
docker images
REPOSITORY
:镜像名称
TAG
:镜像标签
IMAGE ID
:镜像ID
CREATED
:镜像的创建日期(不是获取该镜像的日期)
SIZE
:镜像大小
这些镜像都是存储在Docker的 /var/lib/docker
目录下
3.1.2 搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
# 比如 docker search nginx
NAME
:仓库名称
DESCRIPTION
:镜像描述
STARS
:用户评价,反应一个镜像的受欢迎程度
OFFICIAL
:是否官方
AUTOMATED
:自动构建,表示该镜像由Docker Hub自动构建流程创建的
3.1.3 拉取镜像
从docker 仓库下载镜像到本地,镜像名称格式为 名称:版本号 ,如果不指定版本号,就会下载最新版
docker pull 镜像名称
# docker pull centos:7
3.1.4 删除镜像
按镜像 ID 删除镜像
docker rm 镜像ID
删除所有镜像
docker rmi 'docker images -q'
3.2 容器相关命令
容器,是 docker 中的核心概念,镜像是创建容器的软件,容器是由镜像运行产生实例。镜像和容器的关系,就如同 Java 语言中类和对象的关系
容器存放的东西可能更偏向于应用比如网站、程序甚至是系统环境
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
查看最后一次运行的容器
docker ps -l
查看停止的容器
docker ps -f status=exited
3.2.2 创建与启动容器
创建容器:docker run
参数说明
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
交互式方式创建容器
以交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式启动容器,如果退出容器,则容器会进入停止状态。可以理解成交互式容器 是前台容器。
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
# 比如:docker run -it --name=mycentos centos:7 /bin/bash
# docker run:表示创建容器
# -it:表示运行容器并进入它的命令行
# --name=mycentos:给当前的容器命名
# centos:7:使用该镜像创建
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash
创建容器
docker run -it --name=mycentos centos:7 /bin/bash
创建好容器,并且已经进入到容器内部了,可以直接观察前面中括号里面的内容发现,跟创建容器之前不一样了,
并且 通过 dir 命令,会发现,其实容器内部也是一个 centos
, 我们可以把每个容器都看成一个小电脑或者服务器
重新开一个新的会话,查看刚刚创建的容器是否已经有了。
退出当前容器
退出之后,容器也就退出了,没有删除
创建后台容器
docker run -id --name=mecentos90 centos:7
查看 docker 容器已经运行
守护式方式创建容器:
创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):守护容器可以理解成在后台运行的容器
# 守护式容器和交互式容器的创建方式区别:
# ① -it 换成 -di
# ② 去掉后面的 /bin/bash
docker run -di --name=容器名称 镜像名称:标签
# 比如:docker run -di --name=mycentos10 centos:7
通过 docker ps 查看容器已经是运行状态
进入守护式容器方式:
docker exec -it 容器名称(或容器ID) /bin/bash
# 比如 docker exec -it mycentos88 /bin/bash
已经进入到容器内部了,如果现在退出,然后查看容器是否还在后台运行
3.2.3 停止与启动容器
docker stop 容器名称(或容器ID)
# 比如: docker stop mycentos88
查看容器是否已经停止
docker ps
3.2.4 文件拷贝
我们需要在容器内安装一个软件,软件首先需要有安装包,我们就需要把安装包拷贝到容器内。我们通常的操作是先把文件上传到宿主机,然后我们在将文件从宿主机拷贝到容器内的某个目录下面进行安装。
如果我们需要将文件拷贝到容器内使用可以使用 cp 命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
# docker cp anaconda-ks.cfg mycentos88:/usr/local
也可以从容器中把问价拷贝到当前目录
docker cp mycentos88:/usr/local/anaconda-ks.cfg ./
3.2.5 目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
# 创建并启动容器,并挂在到linux中的/usr/local/myhtml 目录到容器的 /usr/local/myhtml 中,也就是操作linux中/usr/local/myhtml就相对与操作容器
docker run -di --name=容器名称 -v /usr/local/myhtml:/usr/local/myhtml centos:7
可以通过在linux目录中创建文件,再到容器中查看是否有该文件完成测试
3.2.6 查看容器 IP 地址
# docker inspect 容器名称(或容器ID)
docker imspect mycentos88
3.2.7 删除容器
# docker rm 容器名称(或容器ID)
docker rm mycentos88
删除容器的时候,如果容器在运行,会报错,必须先停止容器
docker stop mycentos88
docker rm mycentos88
四、应用部署
4.1 mysql 部署
# 拉取mysql镜像
docker pull centos/mysql-57-centos7
# 创建容器
docker run -di --name=mysql5.7 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7
#-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
#-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户远程登陆密码
通过window的sqlyog进行连接,ip地址为虚拟机的ip地址,端口为33306
进行测试连接
4.2 tomcat部署
# 拉取镜像
docker pull tomcat:7-jre7
# 创建容器
docker run -di --name=mytoncat -p 9000:8080 -v/usr/local/webapps:/usr/local/webapps tomcat:7-jre7
本地的war包,上传到 linux 中的/usr/local/webapps 中
在 window 端,访问:http://192.168.43.128:9000/dubbo-admin-2.6.0/
访问成功即部署成功
4.3 nginx 部署
# 拉取镜像
docker pull nginx
# 创建容器
docker run -di --name=mynginx -p 80:80 nginx
部署完成,window访问:192.168.43.128
即部署成功
4.4 redis 部署
# 拉取镜像
docker pull redis
# 创建容器
docker run -di --name=myredis -p 6379:6379 redis
在window中,使用redis客户端连接
redis-cli -h 192.168.43.128
连接成功即部署成功