docker笔记

devops基础,以docker为基础的微服务,快速交付和部署

背景

1、在我的环境是正常的,在你那怎么就不行了?
2、环境配置很麻烦,每一个机器都要部署一个环境。

docker就可以实现项目和环境一同打包

java -- apk -- 发布(应用程序)-- 第三方使用apk -- 安装即可用
java -- jar(环境) -- 打包项目带上环境(镜像) -- 发布到docker仓库 -- 直接运行即可

仓库: 私有、公有;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性能消耗
# 内存分配 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
posted @ 2022-03-17 14:58  lyk_109  阅读(30)  评论(0编辑  收藏  举报