Docker
- Docker 概述
- Docker 安装
- Docker 命令
- 镜像命令
- 容器命令
- 操作命令
- …
- Docker 镜像
- 容器的数据卷
- DockerFile
- Docker 网络原理
- idea 整合 Docker
- Docker Compose
- Docker Swarm
- Cl\CD jenkins
Docker 概述
Docker 为什么会出现
- 环境配置是非常麻烦的
- 在我的电脑上可以运行,在你的电脑无法运行
- 打包部署无法直接运行
Docker 应运而生
- Docker 的思想来自于集装箱
- Docker通过隔离机制,将服务器利用到极致
Docker的安装
- 先去 Docker 官方文档 Docker 官方文档
- 点击 Download and install
- 选择你的系统版本**,Windows Linux mac** 都可以,其中会有教程教你一步步下载
以cent os7为例
- 卸载原来的Docker 如果没有则忽视
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装相关依赖
yum install -y yum-utils
- 设置默认镜像并下载DOCKER
yum-config-manager \
--add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo 不使用默认的镜像地址
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云
#下载docker
yum install docker-ce docker-ce-cli containerd.io
- 启动docker
systemctl start docker
- 查看docker版本(如果可以查看则已经启动成功)
docker --version
- 下载Holle-world镜像(测试镜像源是否正确)
docker run hello-world
- 查看镜像
docker images
- 卸载docker
yum remove docker-ce docker-ce-cli containerd.io //卸载docker
rm -rf /var/lib/docker //删除docker默认工作路径
常用Docker 命令
帮助命令
docker vesion # 查看版本
docker info # 查看docker 信息
docker -- help # 帮助命令
镜像命令
docker images --help # 查看镜像常用命令
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show numeric IDs
docker images # 查看镜像
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
镜像的仓库源 | 标签 | 镜像的id | 创建的时间 | 镜像的大小 |
docker search 镜像名 #搜索镜像
docker search 镜像名 --filter=STARS=3000 # 搜索出star 数大于三千的目标
docker pull 镜像名 # 下载目标镜像,默认最新版本
docker pull 镜像名:版本 # 选择版本下载
docker rmi -f 镜像id #删除指定的镜像
docker images -aq # 查找所有镜像id
docker rmi -f $(docker images -aq) #删除所有镜像
容器命令
下载镜像centos为例
docker pull centos # 下载centos 镜像
docker run[参数] image
# 参数说明
--name="Name" # 容器名字 ,用来区分容器
-d # 后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
docker run -it -rm tomcat # 用完即删
- 启动镜像,进入容器 的命令端
- 输入exit 退出容器,并且停止。
docker ps #查看正在运行的容器
docker ps -a # 查看曾经运行的容器
docker ps -a -n=1 # 查看最近创建的容器
docker ps -aq # 显示所有容器编号
ctrl + p + q # 退出容器,不停止
- 删除容器
docker rm 容器id # 删除容器
docker rm -f $(docker ps -aq) # 删除所有容器
- 启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止容器
docker kill 容器id # 强制停止容器
常用的进阶命令
-
后台启动
docker run -d 镜像 # 启动后发现无前台进程,会自动立刻停止
-
查看日志
docker logs --help # 查看日志相关命令
- 查看容器中的进程信息
docker top 容器id
- 查看容器源数据
docker inspect 容器id
- 进入当前正在运行的容器
docker exec -it 容器id /bin/bash
docker attach 容器id
# 区别
# docker exec 进入容器后开启一个新的终端
# 进入容器正在执行的终端,不会启动新终端
- 从容器内拷贝文件到主机
docker cp 容器id:主机拷贝到的地址
总结
Docker 安装 nginx
- 查询一下 nginx
docker search nginx
- 下载 nginx 镜像
docker pull nginx
- 查看安装的镜像
docker images
- 后台运行nginx 镜像 别名为 nginx01 主机端口3344映射容器端口80
docker run -d --name nginx01 -p 3344:80 nginx
- 查看 nginx 运行成功后的页面
- 由于以上操作都是我在阿里云服务器上的操作 ,因此我可以通过外网+端口直接访问(端口一定是开放状态)。
Docker 可视化界面管理
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- 浏览器访问如果你是本地运行的,直接 localhost:8088 ,如果是服务器上就服务器ip+端口(图形化界面用的少,可以忽略)
Docker镜像详解
镜像是啥?
镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,他包含运行某个软件所需的所有内容,包括代码,库,环境变量,配置环境等。
Docker 镜像加载原理
UnionFs (联合文件系统)
Docker镜像加载原理
- 特点:Docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像顶部,这一层叫做容器层,下面的都是镜像层。
COMMIT 镜像
docker commit #提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
容器数据卷
什么是容器数据卷?
容器之间数据共享!Docker 容器产生的数据,同步到本地!
特点:持久化和同步操作,容器间的数据共享。
数据卷的使用
方法一
docker run -it -v 主机目录:容器目录 容器名 # 两者目录同步
- 启动镜像centos 并将主机的 home/ceshi 映射到容器 内 /home
- 然后退出容器 ctrl + p + q
- 查看容器 centos 源数据
- 找到下面代码,可以看到我们的地址挂载成功
"Mounts": [
{
"Type": "bind",
"Source": "/home/ceshi",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
- 挂载成功后 ,你在容器home内的一切文件都会同步到你的主机/home/ceshi中,主机中的一切文件也会同步到容器中。
具名挂载和匿名挂载
具名
docker run -it -v 数据卷名字:容器目录 容器名 # 默认保存在 /var/lib/docker/volumes/数据卷名字
匿名
docker run -it -v 容器目录 容器名 # 默认保存在 /var/lib/docker/volumes/随机名字
设置可读可写
docker run -it -v 本地目录:容器目录:ro 容器名 # 只写
docker run -it -v 本地目录:容器目录:rw 容器名 # 可读可写,默认
使用 --volumes -from
docker run -it --name docker01 --volumes -from 容器二 镜像名
# 不同容器间数据卷共享
Docker mysql数据同步实战
具体mysql镜像下载配置可以去 docker hub 搜索 mysql查看
https://hub.docker.com/
- 先下载mysql镜像
- 启动mysql,同时挂载相关地址。启动后就可以直接连接你的数据库了
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mysql初始密码 --name mysql01 mysql:5.7
- 在主机下的home目录也可以查看到mysql容器内的内容
- 删除容器后,查看主机mysql数据,依旧存在。
Dockerfile
Dockerfile 就是用来构建docker 镜像的构建文件命令脚本。
通过脚本可以生成镜像
# 创建一个dockerfile文件并写
vim dockerfile1
# 文件内容
FROM centos # 基础镜像
VOLUME ["挂载目录名","挂载目录名"] #镜像生成容器后,容器内部会有相对应的目录与主机目录挂载
CMD echo "生成后发送的文字"
CMD /bin/bash # 生成后进入
# 保存后退出
# 生成镜像
docker bulid -f dockerfile文件路径 -t 生成镜像名字:版本 . #点的意思是在当前路径下生成
基础知识
-
每个关键字都是大写字母
-
执行从上到下
-
#注释
-
每一个指令都是一个镜像层
-
如下图
- 然后运行指令
docker build -f mydockerfile -t mycentos:0.1 . # 中间的mydockerfile是文件名
- 生成镜像成功
- 查看某镜像构建历史
docker history 镜像id
制作Tomcat 镜像
- 创建文件Dockerfile 官方默认文件名字,等下构建时可以省略文件名。
- vim Dockerfile 添加如下代码
FROM centos
MAINTAINER zzzyuan
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.37.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.37
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.37
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.37/bin/startup.sh && tail -F /u/usr/local/apache-tomcat-9.0.37/bin/logs/catalina.out
- 构建镜像
docker build -t diytomcat .
- 运行镜像
docker run -d -p 9090:8080 --name mytomcat01 -v /home/yuan/tomcat/test:/usr/local/apache-tomcat-9.0.37/webapps/test -v /home/yuan/tomcat/logs:/usr/local/apache-tomcat-9.0.37/logs diytomcat
- 运行后可以直接访问 路径为ip + 端口
发布自己的镜像
- 先去Dockerhub注册一个自己的账号https://hub.docker.com/
- 在主机上登录自己的账号
docker login -p 密码 -u 账号
Options:
-p, --password string Password
--password-stdin Take the password from stdin
-u, --username string Username
docker -logout # 退出账号
- 提交自己的镜像
docker tag 镜像id 作者/镜像名:版本号 # 修改镜像名,防止重复
docker push 镜像名:版本 # 提交镜像