Docker快速入门教程
- Docker快速入门教程
1. 服务相关指令
1.1 开启docker服务
systemctl start docker
1.2 查看docker状态
systemctl status docker
1.3 重启docker服务
systemctl restart docker
1.4 设置开机自启动docker
systemctl enable docker
2. 镜像相关指令
类似面向对象中的类
2.1 查看本地docker镜像
docker images
docker images -q
(-q 查看所有镜像的ID)
2.2 查找线上docker镜像
docker search XXX:XXX
名字:版本号
2.3 拉取docker镜像
docker pull redis:5.0
名字:版本号
2.4 删除docker镜像
docker rmi xxx
名字或ID
3. 容器相关指令
容器类似面向对象中的实例
通过镜像创建容器类似类的实例化
3.1 创建容器
docker run -i -t --name='名字' 镜像名 /bin/bash
docker run -it --name='名字' 镜像名 /bin/bash
docker run -it --name '名字' 镜像名 /bin/bash
(以上三种等价)
-i: 一直运行
-t: 分配伪终端
docker run -i -d --name '名字' 镜像名 /bin/bash
-d: 后台建立容器
后台建立的容器,exit后不会关闭
-it: 交互式容器
-id: 守护式容器
3.2 查看容器
查看运行的docker容器
docker ps
查看历史容器
docker ps -a
3.3 进入容器
docker exec -it '容器名或者id' /bin/bash
3.4 关闭容器
docker stop '容器名或者id'
3.5 启动容器
docker start '容器名或id'
3.6 删除容器
docker rm '容器名或id'
3.7 查看容器信息
docker inspect '容器名或id'
4. 数据卷
容器中数据交互存在的主要问题
-
容器内数据存储?
-
容器内外数据交互?
-
容器间数据交互?
数据卷的存在解决这些问题。
4.1 配置数据卷
使用-v 既可设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)...
-
目录容器内需为绝对路径
-
目录不存在会自动创建
-
可以挂载多个数据卷,也就是可以使用多个-v
例:
docker run -it --name test1 -v /root/data:/root/data centos:7 /bin/bash
挂载后数据会持久化存在。
4.2 数据卷容器
创建数据卷容器
docker run -it --name c1 -v/volume centos:7 /bin/bash
关联数据卷
docker run -it --name c2 --volumes-from c1 centos:7 /bin/bash
5. Docker应用部署实例
主要以下几个步骤
-
搜索镜像
-
拉取镜像
-
创建容器
-
操作容器
5.1 部署mysql
# 搜索镜像
docker search mysql
# 拉取镜像
docker pull mysql:5.6
# 创建容器
docker run -id -p 3307:3306 --name c_mysql -v ... -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 ...
-p 3307:3306 将容器3306端口映射到宿主机3307端口
-e MYSQL_ROOT_PASSWORD=123456 初始化root用户密码
# 操作容器
数据库操作
5.2 部署Tomcat
# 搜索镜像
docker search tomcat
# 拉取镜像
docker pull tomcat
# 创建容器
docker run -id --name c_tomcat -p 8080:8080 ... tomcat ...
-p 8080:8080 将容器8080端口映射到宿主机8080端口
# 操作容器
Tomcat操作
5.3 部署Nginx
# 搜索镜像
docker search nginx
# 拉取镜像
docker pull nginx
# 创建容器
docker run -id --name c_nginx -p 80:80 -v ... nginx ...
-p 80:80 将容器80端口映射到宿主机80端口
# 操作容器
nginx操作
5.4 部署Redis
# 搜索镜像
docker search redis
# 拉取镜像
docker pull redis:5.0
# 创建容器
docker run -id --name c_redis -p 6666:6666 -v ... redis:5.0 ...
-p 6666:6666 将容器6666端口映射到宿主机6666端口
# 操作容器
Redis操作
外部机器连接Redis
./redis-cli.exe -h 192.168.XX.XX -p 6666
6. Dockerfile
6.1 docker镜像原理
3个问题
Linux:文件系统两个部分组成
-
bootfs
-
bootloader 引导加载程序
-
kernel 内核
-
-
rootfs
- root文件系统,包含/dev /proc /bin /etc 等
不同linux发行版,bootfs基本一致,rootfs不同。
6.2 镜像制作
-
容器转为镜像
-
dockerfile
6.2.1 容器转为镜像
转换为新的镜像
docker commit 容器id 镜像名称:版本号
分享镜像
- 压缩镜像
docker save -o 压缩文件名称 镜像名称:版本号
2. 解压镜像
docker load -i 压缩文件名称
非目录挂载的文档会继续存在。
6.2.2 Dockerfile
FROM scratch
ADD centos-7-xc86__64-cockcer.tair.xz /
LABEL org.label-schemo.schema-version--1.0- \
ong.label-schema.inamme--Centos
CMD[-/bin/bssh""]
-
FROM 指定父镜像
-
MAINTAINER 作者信息
-
LABEL 标签
-
RUN 执行命令
-
CMD 容器启动命令
-
ENTRYPOINT 入口
-
COPY 复制文件
-
ADD 添加文件
-
ENV 环境变量
-
ARG 构建参数
-
VOLUME 定义外部可挂载的数据卷
-
EXPOSE 暴露端口
-
WORKDIR 工作目录
-
USER 指定执行用户
-
HEALTHCHECK 健康检查
-
ONBUILD 触发器
-
STOPSIGNAL 设置发送容器的系统调用信号以退出
-
SHELL 指定执行脚本的shell
6.3 Dockerfile 案例
需求:
自定义centos7镜像,要求:
-
默认登录路径为/usr
-
可以使用vim
实现过程:
-
定义父镜像: FROM centos:7
-
定义作者信息:MAINTAINER name<e-mail>
-
执行安装vim命令:RUN yum install -y vim
-
定义默认的工作目录:WORKDIR /usr
-
定义容器启动执行的命令:CMD /bin/bash
通过Dockerfile构建docker镜像
docker build -f 'dockfile路径' -t '新镜像名称版本' .
寻址路径
6.4 Dockerfile部署springboot
-
定义父镜像: FROM java:8
-
定义作者信息:MAINTAINER name<e-mail>
-
将jar包添加到容器:ADD springboot.jar app.jar
文件名 镜像中的名字
-
定义容器启动执行的命令:CMD java -jar app.jar
-
通过Dockerfile构建docker镜像
7. Docker服务编排
7.1 Docker Compose
7.2 Docker Compose使用
docker-compose.yaml
创建./nginx/conf.d 目录
目录下编写 itheima.conf 文件
启动:
docker-compose up
8. Docker 私有仓库
8.1 搭建私有仓库
# 1.拉取私有仓库镜像
docker pull registry
# 2.启动私有仓库镜像
docker run -id --name registry -p 5000:5000 registry
# 3.检查私有仓库是否创建成功
http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库创建成功
# 4. 修改daemon.json 信任私有仓库
{"insecure-registries": ["私有仓库服务器ip:port"]}
# 5. 重启docker服务
systemctl restart docker
docker start registry
8.2 上传镜像至私有仓库
# 1.标记镜像为私有仓库镜像
docker tag centos:7 私有IP:port/centos:7
# 2.上传标记的镜像
docker push 私有IP:port/centos:7
8.3 拉取私有仓库镜像
docker pull 私有ip:port 镜像名
9. Docker相关概念