目录
[Docker 安装](#Docker 安装)
[docker-compose 安装](#docker-compose 安装)
[Docker 命令](#Docker 命令)
[Docker 数据卷、网络](#Docker 数据卷、网络)
Dockerfile制作镜像
docker-compose管理容器
Docker可以理解为一个虚拟出来的操作系统,自带了一个或多个软件。
Docker与虚拟机的区别:虚拟机是物理上划分的,比如内存,磁盘,CPU;Docker与宿主机共享的CPU、内存、磁盘, Docker的性能取决于宿主机,虚拟机性能取决于分配给虚拟的具体大小。
Docker 安装
安装环境:centos7;安装软件:社区版docker
1、安装所需要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、配置阿里镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装
yum install -y docker-ce
4、设置跟随主机启动
systemctl enable docker # 设置跟随主机启动
systemctl start docker # 启动Docker
5、查看Docker 版本
docker -v
docker-compose 安装
docker-compose实际上就是把一堆的启动容器的参数写到一个文件里边,批量的启动容器和批量的管理容器,他就是一种容器编排技术。安装步骤如下:
yum install -y docker-compose
docker-compose --version #查看 docker-compose版本
Docker 命令
1、镜像搜索
docker search [OPTIONS] 镜像名称
示例:搜索mysql :docker search mysql
2、拉取镜像到本地
docker pull 镜像名称[:TAG]
:TAG\]不写默认就是:latest 最新版
3、查看镜像列表
docker images
4、删除镜像
docker rmi \[-f\] \[强制\] 删除 镜像id
5、启动容器
镜像运行起来,就会生成一个容器,这个程序就在这个容器中独立的运行,容器之间是互相隔离的, 数据互相不影响。
启动容器:docker run \[options\] 镜像名称:tag
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,保持输入状态打开,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端(TTY),通常与 -i 同时使用;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-P: 随机端口映射,容器内部端口随机映射到主机的端口
--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的hostname;
-e password="123456": 设置环境变量;
--env-file=\[\]: 从指定文件读入环境变量;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:\ 四种类
型;
--link=\[\]: 添加链接到另一个容器;
--expose=\[\]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
--privileged=true :给容器扩展权限
--restart always:跟随docker重启而启动容器
--rm:容器退出的时候自动删除容器
6、列出正在运行的容器
docker ps
7、进入容器
docker exec -it 容器id/名称 /bin/bash
8、 停止容器的运行
docker stop 容器id/容器名称
9、移除容器
docker rm -f 容器id 强制移除(移除正在运行的容器)
10、宿主机与容器内部文件复制
docker cp 宿主机路径 容器id:容器路径 (从宿主机复制到容器)
docker cp 容器id:容器路径 宿主机路径 (从容器复制到宿主机)
比如很多程序启动以后有默认的配置文件,我们需要从容器中复制到宿主机中修改:比如Redis集群、 mysql配置文件等
11、查看容器的详细情况
docker inspect 容器id
12、查看镜像和容器的磁盘空间使用情况
docker system df -v
13、查看容器实时运行状态
docker stats
14、保存镜像
docker save \[OPTIONS\] IMAGE \[IMAGE】
示例:保存镜像到tar.gz压缩文件
docker save myimage:latest \| gzip \> myimage_latest.tar.gz
15、加载镜像
docker load \< 压缩包文件
示例: docker load \< myimage_latest .tar.gz
16、 列出容器的端口映射
docker port 容器id/名称
\<容器端口\>/协议 -\> \<宿主机IP\>:\<宿主机端口\>
结果:容器端口映射到宿主机端口,而非相反。
## Docker 数据卷、网络
容器启动以后,产生的数据在容器内,如果容器销毁,那么数据就会丢失,所以需要将容器产生或者使用的数据保存在宿主机上,那么就用到了数据卷的概念。启动容器时通过设置-v参数实现挂载数据卷,如下:
-v 宿主机路径文件:容器路径文件 -v 宿主机路径文件1:容器路径文件1
使用场景:java应用部署在容器上,容器长生的日志通过数据卷挂载到宿主机上
Docer 网络包括:host模式、container模式、none模式、 bridge桥接模式(默认模式)。
host模式:跟宿主机一个网段
container模式:这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享,如各种中间件集群内部通信可以考虑设置此种网络方式
none模式:不配置
bridge-桥接模式:bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
创建新的网络:docker network create \[OPTIONS\] 网络名称
docker network create -d bridge my-bridge-network #创建一个我的桥接模式的网络
将容器连接到指定网络:docker network connect 网络名称 容器id/名称
## **Dockerfile制作镜像**
通过Dockerfile制作镜像,Dockerfile就是一个脚本文件,记录一行行的指令。
镜像制作:
docker build -t 镜像名称\[:版本号\] .
进入Dockerfile文件所在的目录执行制作镜像的命令:
1、注意:需要合成的所有文件或者文件夹,请跟Dockerfile文件放在一起。
2、注意:执行制作镜像的命令的时候,必须在Dockerfile文件所在的路径下才可以。
示例:java应用jar文件,Dockerfile文件,docker-compose.yml文件都在一个目录中,通过执行
docker build -t iot-lift:1.0 . 后就可以重新生成镜像。


Dockerfile文件编写说明:
1、 FROM 指令基于某个镜像
指定基础镜像,镜像是一层一层构建的,比如说Tomcat 要在JDK镜像的基础之上构建,所有构建镜像需要指定基本的镜像。
2、WORKDIR 工作目录
格式为 WORKDIR \<工作目录路径\>。
使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定 的目录,如该目录不存在,WORKDIR 会帮你建立目录。进入容器的时候,默认也会进入到工作目 录。
3、ENV 声明变量环境变量
语法:ENV key value 或者 ENV key=value
环境变量声明后,可以在启动容器的时候,替换变量的值
比如:docker run --env \=\... \<目标路径\>
5、RUN 运行指令
RUN 指令是用来 执行命令行命令的。 其格式有两种:shell 格式和exec 格式
6、VOLUME 数据卷
示例: VOLUME \["/data","/abc"
7、端口声明
格式为 EXPOSE <端口1> [<端口2>...]
8、 ENTRYPOINT 入口点
指定容器启动时运行的命令
ENTRYPOINT中的参数始终会被使用(一定会执行,而且无可替代!),而CMD中的额外参数可以在 容器启动时动态替换掉。
9、CMD 指令
指定容器启动时默认运行命令, 如果 docker run 指定了其他命令, CMD 指定的默认命令将会被忽略掉。
示例:spring boot java程序镜像 Dockerfile文件如下:

编写完Dockerfile文件后,将编译好的打包文件iot-lift-0.0.1-SNAPSHOT.jar 放入到和Dockerfile相同的目录下,通过执行:docker build -t iot-lift:1.0 . 就可以制作镜像了,制作完镜像后,可以通过docker run 镜像 来运行容器。
docker-compose管理容器
docker-compose是一种容器编排技术,通过编写docker-compose.yml文件(建议通过idea编写,由很好的提示)实现对容器批量的启动和管理
容器启动: docker-compose up -d #在docker-compose.yml文件目录下执行
容器停止:docker-compose down #在docker-compose.yml文件目录下执行
示例如下:

注意:ports格式为:宿主机端口:容器端口,上述示例就是宿主机的38080端口映射到容器的10020端口