Docker详解

目录

[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 . 后就可以重新生成镜像。 ![](https://i-blog.csdnimg.cn/direct/44b5f0ec1ed74a07afc720fb458155c0.png) ![](https://i-blog.csdnimg.cn/direct/4a632cb1e1ab4a5880d41db67b92258a.png) 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端口

相关推荐
凯子坚持 c2 小时前
Docker网络架构深度解析:从原理到实战
网络·docker·架构
java_logo3 小时前
Apache IoTDB Docker 容器化部署指南:从入门到生产环境实践
docker·容器·apache·iotdb·iotdb部署教程·iotdb部署文档·docker部署iotdb
处女座_三月4 小时前
kubectl 命令行更新项目版本号
docker·容器·kubernetes
Cat God 0074 小时前
基于Docker的MySQL 主从复制(读写分离)
mysql·docker·容器
m0_474606785 小时前
Linux安装docker教程
linux·运维·docker
Jewel Q5 小时前
QEMU、KVM、Docker、K8s(Kubernetes)
docker·容器·kubernetes
学Linux的语莫6 小时前
prometheus、grafana的docker搭建
docker·容器·prometheus
lisanmengmeng6 小时前
zentao的prod环境升级(一)
linux·运维·数据库·docker·容器·禅道
kkoral6 小时前
单机docker部署的redis sentinel,使用python调用redis,报错
redis·python·docker·sentinel