DOCKER学习笔记

DOCKER学习笔记

1.WSL & Docker Desktop


下载Dockers Desktop,集成wsl,然后直接在wsl中使用docker命令,详细见如下教程:

https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers

2.DOCKER服务相关


  1. 手动启动dockersudo service docker start

  2. 手动停止dockersudo service docker stop

  3. 手动重启dockersudo service docker restart

  4. 查看docker运行状态:sudo service docker status

  5. 查看docker版本:docker --version

  6. 避免每次执行docker命令都需要sudo权限

    sudo groupadd docker
    sudo usermod -aG docker $USER
    newgrp docker
    sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
    sudo chmod g+rwx "$HOME/.docker" -R
    
    reference: https://docs.docker.com/engine/install/linux-postinstall/
    
  7. docker开机自启动【具体可以参考官方文档】

    // 开启自启动
    sudo systemctl start docker
    // 关闭自启动
    sudo systemctl stop docker
    

3.DOCKER镜像相关


Docker 镜像原理: 分层 + 叠加

  1. 配置阿里云镜像加速器:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

    路径:阿里云官网–> 容器镜像服务 --> 镜像加速器

  2. 查看本地镜像:sudo docker images | docker image ls

  3. 搜索镜像:docker search xxx

  4. 下载镜像:docker image pull image_name:version

  5. 删除镜像:

    docker image rm [imageName:version | imageID]
    docker rmi [imageName:version | imageID]
    

4.DOCKER容器相关


  1. 查看正在运行的容器:docker ps

  2. 运行容器:

    docker container run -it imagename 
    docker container run -id imagename
    
    参数说明: 
    -i: 保持容器运行,通常与 -t 同时使用。加入 it 这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
    -t: 为容器重新分配一个伪终端,通常与-i同时使用
    -d: 以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec进入容器。退出后,容器不会关闭。
    -it: 创建的容器一般称为交互式容器
    -id: 创建的容器一般称为守护式容器
    --name: 为创建的容器命令
    
  3. 查看所有容器:docker ps -a

  4. 停止容器:docker stop {id}

  5. 重启容器:docker restart {id}

  6. 删除容器:docker rm {id}

    不能删除正在运行的容器

  7. 查看容器信息: docker inspect {id}

5.数据卷


概念:

  • 数据卷是宿主机中的一个目录或者文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

配置数据卷

  • 创建启动容器时,使用 -v 参数设置数据卷

    docker run ... -v 宿主机目录(文件):容器内目录(文件)

  • 创建容器,挂载已有容器的数据卷

    docker run -it --name=c1 --volumes-from c3 image:tag

6.DockerFile


6.1 镜像制作方法

制作镜像时,目录挂载不会生效,但是容器根目录下的文件会生效(非挂载)

  1. 方法一:容器转成镜像

    docker commit 容器id 镜像名称:版本号
    docker save -o 压缩文件名称 镜像名称:版本号
    
  2. 方法二:DockerFile

6.2 DockerFile

关键字 作用 备注
FROM 指定父镜像 指定dockerfile基于哪个image构建
MAINTAINER 作者信息 用来表明这个dockerfile的作者
LABEL 标签 用来表明dockerfile的标签,可以使用Label代码,最终都是在docker image基本信息中可以查看
RUN 执行命令 执行一段命令默认是 /bin/bash 格式,RUN command 或者 RUN ["command","param1","param2"]
CMD 容器启动命令 启动容器时候的默认命令和EXTRYPOINT,格式为:CMD command param1 param2 或者 CMD ["command","param1","param2"]
COPY 复制文件 build的时候复制文件到image
ADD 添加文件 build的时候添加文件到image中,不仅仅局限于当前的build上下文,可以来源于远程服务
ENV 环境变量 指定build时候的环境变量,可以在启动容器的时候通过 -e 覆盖,格式:ENV name = value
ARG 构造参数 只在构建的时候使用的参数,如果ENV中有ARG中的重名变量,默认覆盖ARG的参数
volume 定义外部可以挂载的数据卷 指定buildimage中,哪些目录可以启动的时候挂载到文件系统中,启动容器的时候使用 - v 绑定,格式VOLUME["目录"]
EXPOSE 暴露端口 定义容器运行的时候监听的端口,启动容器的时候使用-p来绑定暴露端口,格式:EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工作目录 指定容器内部的工作目录,如果没有创建则自动创建,如果指定 / ,使用的是绝对地址,如果不是/开头,那么是在上一条workdir的路径的相对路径
USER 指定执行用户 指定build或者启动的时候,用户在RUN CMD EXTRYPOINT执行的时候的用户
HEALTHCHECK 健康检查 指定检测当前容器健康检测的命令,基本上没用,因为很多时候应用本身有健康检测的机制
ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候,当执行FROM完成之后,会执行ONBUILD命令,但是不影响当前镜像,用处也不怎么大
STOPSIGNAL 发送信号量到宿主机 STOPSIGNAL指令设置将发送到容器的系统调用信号以退出
SHELL 指定执行脚本的shell 指定RUN CMD EXTRYPOINT执行命令的时候使用的shell

7.Docker部署SpringBoot项目


思路一:将JAR包和DockerFile一起上传至服务器

思路二:本地wsl制作镜像,上传到私有仓库 or hub.docker,然后服务器拉取

这里选择思路二实践,思路一好像也挺麻烦;思路二搭建私有仓库,一劳永逸

远程服务器为华为云服务,其中Step1 - Step4均在华为云服务器操作;Step5在本地操作

本地Docker环境:windows subsystem for linux 2 + docker desktop,配置详见第1部分

7.1 私有仓库搭建

Step1: 服务器(华为云服务器)安装docker

这里推荐使用官方安装脚本自动安装。安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内daocloud一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

如果需要卸载docker,可使用如下命令:

sudo apt-get remove docker docker-engine docker.io containerd runc

Step2: 配置镜像加速服务

进入阿里云镜像加速服务界面注册,然后按照官方操作文档进行配置。

Step3: 拉取registry镜像

docker pull registry # 默认就是最新的 latest 版本

Step4: 运行registry镜像

docker run -d --name=name --restart=always -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

Step5: 测试是否搭建成功

  1. 在本地拉取ubuntu:16.04

    docker pull ubuntu:16.04

    可以使用docker images命令查看是否拉取成功

  2. 制作ubuntu新的tag

    docker tag ubuntu:16.04 your-ip:5000/your-image-name

  3. 上传镜像到私有仓库

    docker push your-ip:5000/your-image-name

    此处可能报错:http: server gave HTTP response to HTTPS client

    解决方案,在docker desktop中,编写如下配置信息
    DOCKER学习笔记_第1张图片

    马赛克部分:"insecure-registries" : ["ip:port"]

    ps: 第二处马赛克为配置阿里云镜像加速服务,详见STEP 2

    编写好配置信息后,重启docker,然后重新执行docker push命令

  4. 检查是否成功上传

    执行命令:curl ip:5000/v2/_catalog
    image-20220908202053064

    ps: 为搭建私有仓库的服务器IP,如果repositories中出现刚上传的image的名称,则表示搭建成功

  5. 测试拉取镜像

    测试前先删除之前的tag,即执行命令:docker rmi ip:port/your-image-name

    然后拉取镜像,执行:docker pull port:5000/your-image-name

    不出意外应该会拉取成功,如下图:DOCKER学习笔记_第2张图片

7.2 用wsl制作镜像

// todo 项目本身也不复杂,就用到了mysql + jdk 依赖,所以7.2、7.3、7.4加上todo标签吧,以后有需求再来学!

ddl和业务需求是第一驱动力!

7.3 镜像上传

// todo

7.4 镜像拉取&运行

// todo

你可能感兴趣的:(Java,web开发,docker,学习,容器)