docker笔记
devops基础,以docker为基础的微服务,快速交付和部署
背景
1、在我的环境是正常的,在你那怎么就不行了?
2、环境配置很麻烦,每一个机器都要部署一个环境。
docker就可以实现项目和环境一同打包
java -- apk -- 发布(应用程序)-- 第三方使用apk -- 安装即可用
java -- jar(环境) -- 打包项目带上环境(镜像) -- 发布到docker仓库 -- 直接运行即可
![](https://img2022.cnblogs.com/blog/1455102/202203/1455102-20220317120906137-1637693131.png)
仓库: 私有、公有;Docker Hub、阿里云...
镜像: 容器模版,基于镜像可以创建多个容器
容器: 实际的程序运行在单独的docker容器当中
docker是Client/Server结构,Docker的守护进程运行在主机上,通过Socket从客户端访问
分层下载:UnionFS(联合文件系统),利用已有的镜像,增加效率,加快速度
linux(centos)下安装和卸载
yum install -y yum-utils
# 这里可以换成阿里云镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io
# 安装完成查看版本
docker version
# 卸载
yum remove docker-ce docker-ce-cli containerd.io
# 默认工作路径
rm -rf /var/lib/docker
配置docker加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://qiyb9988.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
基础使用命令
docker version # 查看docker版本
docker info # 查看docker信息
docker images # 查看所有镜像的列表
docker ps -a # 查看运行的容器
docker search # 搜索镜像 --filter=STARS=5000
docker pull mysql:5.7 # 下载镜像
docker rmi -f # 删除镜像
docker run image # --name="name" -d -it -p 8080:8080 主机:容器
运行
docker run -it --rm centos /bin/bash # 进到容器内执行
exit # 退出 ctrl + P + Q(保持容器运行退出)
docker start containerId # 开始
docker stop containerId # 停止
docker rm containerId # 删除容器,运行的容器加-f
docker exec
docker attach container # 进入容器正在执行的终端
docker cp containerId:[容器内路径] [目的主机路径] # 从容器中复制
查看
docker inspect containerId # 查看镜像元数据
docker top container # 查看容器中进程信息
docker stats # 查看docker运行的container性能消耗
elastic search
# 内存分配 64M ~ 256M
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=signle-node" -e ES_JAVA_OPTS="-Xms64m -Xmx256M" elasticsearch:7.6.2
提交自己的镜像
docker commit // 提交容器成为一个新的副本
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker push
# 默认的tomcat镜像webapp中没有文件,需要进到容器操作
docker run -d --name tomcat1 -p 8080:8080 tomcat
docker exec -it [tomcat1Id] /bin/bash
cp -r webapp.dist/* webapp
# 将上面的容器提交镜像,生成的新的镜像就不需要在操作了
docker commit -a="ykli109" -m="add webapps app" [tomcat1Id] tomcatwithapp:0.0.1
docker run -d -p 8080:8080 --name tomcatwithapp1 tomcatwithapp:0.0.1
容器数据卷
如果数据都在容器中,容器删除,数据将会丢失!需求:数据可以持久化。
容器持久化和同步操作,容器间也可以数据共享。
# -v [外部目录]:[容器目录], 容器中/home其实指向的是外部/root
docker -run -d -p 8080:8080 -v /root:/home centos /bin/bash
# 只读
docker -run -d -p 8080:8080 -v /root:/home:ro centos /bin/bash
# 可读可写
docker -run -d -p 8080:8080 -v /root:/home:rw centos /bin/bash
# 查看volume
docker volume ls
docker volume inspect [VOLUME NAME]
# 容器数据同步,容器centos2使用容器centos1相同的数据
docker run -d --name centos02 --volumes-form centos01 centos
Dockerfile
构建docker镜像的配置
- FROM
[:tag] - 基础镜像
- MAINTAINER
- 镜像作者 - RUN
- 镜像构建运行的指令: - ADD
- 添加内容,包含解压功能 - COPY
- 与ADD基本一致,文件拷贝到镜像中 - WORKDIR - 镜像工作目录
- VOLUME ['/data'] - 设置卷,挂载主机目录
- EXPOSE
- 暴露端口配置 - CMD - 指定容器启动的时候的指令,只有最后一个生效
- ENRYPOINT - 指定容器启动的时候的指令,不同于CMD,可以追加
- ONBUILD - 为镜像创建触发器,当一个镜像被用作其他镜像的基础镜像时,会执行
- ENV
- 环境变量
// 包含vim的centos dockerfile
FROM centos
MAINTAINER liyunkun<ykli109@outlook.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
# -f dockerfile位置 -t [image name]:[version]
docker build -f dockerfile -t centos1 .
# 打包镜像
docker save -o centos_vim.tar centos_vim
# 使用打包的镜像
docker load --input centos_vim.tar
发布镜像
没有账号需要先申请账号:https://hub.docker.com/
docker login -u username -p password
docker push centos_vim
# denied: requested access to the resource is denied
# 执行报错,必须加上用户名
docker tag centos_vim ykli109/cetnos_vim
docker push ykli109/centos_vim