Docker学习
Docker学习
视频地址:https://www.bilibili.com/video/BV1og4y1q7M4 狂神
0.初识
思想:集装箱(隔离)
Docker 官网:Docker Docs: How to build, share, and run applications | Docker Documentation
Docker 容器官网:Docker Hub Container Image Library | App Containerization
名词解释:
- Image 镜像:类似一个模板,可以通过这个模板创建多个容器。
- Container 容器:独立运行一个或一组应用,通过镜像创建,容器之间互相独立
- Repository 仓库:存放镜像的地方。
内部的镜像思想:分层思想。如 pull ngixn,最底层是 CentOS,上面是命令等等5层。当再下载MySQL 时,也需要最底层 CentOS,但是上一个镜像已经有了,可以直接拿来用,第一层不下载,由原来6层变为5层,第一层显示但不下载。(复用思想,为自定义镜像做铺垫)
Docker 组成:
Docker 底层运行原理图
- 先去本地找,没有就去 Docker-Hub 上找,没有报错,有下载后执行
底层原理
- Docker 是 Client-Server 类型服务。Docker 的守护进程运行在主机上。
为什么 Docker 运行比虚机快
- Docker 不需要重新加载虚拟机内核,虚拟机每次启动都需要加载一次内核(Guest OS)。所以,VM 虚拟机启动是分钟级别,Docker 启动是秒级别。
1.入门 - Docker命令与镜像
官方命令图解
帮助命令
1 | docker --help # 万能命令 |
镜像命令
1 | docker images # 所有镜像 |
说明:镜像名,标签,镜像Id,创建日期,镜像大小
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 19 months ago 13.3kB
1 | docker run 镜像名 # 根据镜像创建容器 |
其他命令
1 | 查看容器内部日志 |
创建自定义镜像镜像
命令
1 | docker commit -a="wang" -m="add app" 镜像id 自定义镜像名称:版本 |
2.基础 - 容器数据卷
容器数据卷:将容器内的目录,挂载到 Linux 上
-v
- 匿名挂载: -v 容器路径
- 具名挂载: -v 卷名:容器路径
- 扩展,容器路径:ro 或 容器路径:rw 解释:ro readonly:容器内只能读;rw readwrite : 可以读写
容器的持久化与同步操作。防止容器删除了,数据就没有了。
-v 挂载后只需要操作 Linux 下的文件就可以,不需要修改容器中的文件,会自动同步。
命令:
1 | docker run \ |
3.Dockerfile 学习
Dockerfile:通过这个脚本可以生成一个镜像
DockerFile指令
1 | FROM # 基础镜像,镜像基础 |
3.1 构建步骤
基础知识:
每个关键字(指令)都是大写。
执行从上到下顺序执行。
每一个指令都会创建提交一个新的镜像层,并提交!
步骤:开发,部署,运维
- DockerFile:构建文件,定义了一切的步骤,源代码
- DockerImages:通过DockerFile 构建生成的镜像,最终发布和运行的产品
- Docker容器:容器就是镜像运行起来提供服务器
1 | 注意后面有个点 |
3.2 构建自己的 DockerFile
1 | # 文件名:mydockerfile-centos |
3.3 Docker 容器之间文件共享
1 | docker run -it --name 自定义名称 --volumes-from 容器名称或id 镜像名 |
3.4 ★Dockerfile 实践
场景:通过 Docker 搭建 Tomcat 环境
环境:JDK 与 Tomcat 压缩包准备(用于 Dockerfile 复制),readme.txt 说明文档,Docker 服务
书写 Dockerfile 文件内容
通过 Dockerfile 构建容器
1
2Dockerfile 是默认 build 对象,不需要 -f 指定文件 diytomcat 是构建的镜像名称
docker build -t diytomcat根据镜像构建容器
启动命令
1
2
3
4
5
6
7
8-v 挂载说名:虚拟机位置:容器内位置
docker run \
-d \
-p 9090:8080 \
--name mytomcat01 \
-v /home/app/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test \
-v /home/app/build/tomcat/tomcatlogs/:usr/local/apache-tomcat-9.0.22/logs \
diytomcat # 上面 Dockerfile 构建的镜像名称测试容器
在 test 下 WEB-INF 下添加 web.xml
在 test 下添加 index.jsp 文件。
以上内容在虚拟机文件中添加,已挂载,自动同步
Docker 实践
Docker安装Nginx
Docker 安装Nginx容器 (完整详细版) - 腾讯云开发者社区-腾讯云 (tencent.com)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23提供外部挂载文件夹
mkdir -p /usr/local/app/docker/nginx/conf
mkdir -p /usr/local/app/docker/nginx/log
mkdir -p /usr/local/app/docker/nginx/html
生成容器
docker run --name nginx -p 9001:80 -d nginx
将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /usr/local/app/docker/nginx/conf/nginx.conf
将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /usr/local/app/docker/nginx/conf/conf.d
将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /usr/local/app/docker/nginx/html
挂载运行nginx
docker run \
-p 9001:80 \
--name mynginx \
-v /usr/local/app/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/app/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /usr/local/app/docker/nginx/log:/var/log/nginx \
-v /usr/local/app/docker/nginx/html:/usr/share/nginx/html \
-d nginxDocker安装tomcat
1
2
3
4
5docker pull tomcat
docker run \
-p 8080:8080
--name mytomcat \
-d tomcat问题:外部与内部访问访问404
curl localhost:8080
(117条消息) 解决Docker启动Tomcat容器,访问404问题_elsostal的博客-CSDN博客
说明:进入 docker app 内部:
docker exec -it mytomcat /bin/bash
原因:webapps 下面为空,只需要将 webapps.dist 下内容复制到 webapps 下即可
cp -r webapps.dist webapps
通过Dockerfile搭建自定义镜像
1
2
3
4
5
6注意点:
1. FROM centos
2. 环境搭建
- JDK 等等
- tomcat copy相关压缩包
3. 配置环境变量 如 JAVA_HOME=