目 录CONTENT

文章目录

云原生 | Docker 初探

RobKing
2022-06-18 / 0 评论 / 0 点赞 / 145 阅读 / 1,574 字

云原生 | Docker 初探

安装与配置

Ubuntu环境

  • ubuntu安装docker教程

  • 拉取镜像太慢,配置镜像加速

  • vim /etc/docker/daemon.json

    对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

    {"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
    

    可以添加多个

    南京大学:https://docker.nju.edu.cn/  (好用)
    科大镜像:https://docker.mirrors.ustc.edu.cn/
    网易:https://hub-mirror.c.163.com/
    阿里云:https://<你的ID>.mirror.aliyuncs.com
    七牛云加速器:https://reg-mirror.qiniu.com
    
    https://hub-mirror.c.163.com
    https://docker.m.daocloud.io
    https://ghcr.io
    https://mirror.baidubce.com
    

    重新启动

    $ sudo systemctl daemon-reload
    $ sudo systemctl restart docker
    

Mac环境

直接使用brew安装cask

brew install --cask docker

会下载桌面版本的docker,之后按照提示运行即可

初步了解

镜像:类似于虚拟机的镜像,提供执行环境,比如go语言的镜像,就是提供go语言的运行环境

容器:镜像通过执行run方法可以得到一个容器,比如是ubuntu环境,可以在容器里安装RabbitMQES环境。

仓库:拉取镜像的地方

Dockerfile:文本文件(脚本),包含很多执行指令,用于构建自己的镜像,可用于扩展官方镜像。相当于docker image build 的构建镜像的源代码

从仓库(一般为DockerHub)下载(pull)一个镜像,Docker执行run方法得到一个容器,用户在容器里执行各种操作。Docker执行commit方法将一个容器转化为镜像。Docker利用loginpush等命令将本地镜像推送(push)到仓库。其他机器或服务器上就可以使用该镜像去生成容器,进而运行相应的应用程序了。

镜像 Image 和 容器 Container 指令

镜像image相关

  • docker build

  • docker image pull 拉取镜像

  • docker images 本地存储的Docker镜像

  • docker images --all 全部镜像 包括中间层镜像和未被标记的镜像

  • docker rmi <IMAGEID>删除镜像,如果该镜像被容器引用了不能完全删除,需要先删除容器

  • docker create -it <镜像名> 通过镜像创建container

  • docker run -it <镜像名> 通过镜像创建并运行container

    -p 8080:8080 -p表示端口映射,格式:宿主机端口:容器运行端口

    -e MYSQL_ROOT_PASSWORD=123456 mysql-e表示添加环境变量,这里是mysql的密码。

    --name <name> 将容器命名为

  • push到dockerhub

    • docker login登录dockerhub账号
    • docker push <imageName>

容器container相关

  • docker ps查看正在运行的容器 (docker container ls)

  • docker ps -a 查看已经退出的容器 (docker container ls --all )

  • docker run -d -it --name centos.7.2 centos:7 -d在后台运行 -t 是保持stdout以及分配终端

    -i 进入container内部

    只用 -i 参数时,由于没有分配伪终端,但命令执行结果仍然可以返回。

  • docker exec -it 容器名称 (或者容器ID) /bin/bash 不会将终端附加到容器中,而是在当前终端中打开一个新的终端会话。

    在宿主机上进入容器,登录守护式容器

  • docker attach 指令用于附加到正在运行的容器上。在容器内执行的命令和输出将被显示在当前终端上,类似于使用 SSH 连接到远程服务器并在其上运行命令。exit 退出

  • docker logs 镜像名 查看日志

  • docker container kill id 杀死正在使用的container

  • docker start/stop <CONTAINERID> 启动刚create的或者已经停止的container

  • docker (container) rm id 删除使用完的container 防止占用内存

  • docker container prune 清理所有处于终止状态的容器

  • docker network create test-network 容器通信

    –network 名字

  • docker export f299f501774c > halo.tar导出容器成tar文件

  • docker import - image-name < halo.tar导入tar文件成镜像

数据卷相关

数据卷 是一个可供一个或多个容器使用的特殊目录,可以在容器之间共享和重用,数据卷 默认会一直存在,即使容器被删除

  • docker volume ls 查看所有的数据卷

  • 创建一个数据卷 docker volume create my-vol

  • docker volume inspect my-vol 在主机里使用以下命令可以查看指定 数据卷 的信息

  • --mount source=my-vol,target=/usr/share/nginx/html。启动一个挂载数据卷的容器

    创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /usr/share/nginx/html 目录

    docker run -d -P --name web  --mount source=my-vol,target=/usr/share/nginx/html nginx:alpine
    # -v my-vol:/usr/share/nginx/html 
    
  • docker inspect web 查看数据卷的具体信息

  • docker rm volume web 删除 docker volume prune 删除所有

Dockerfile

实例

FROM golang:lasest

ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct

WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build  -ldflags="-w -s" -o main
RUN mkdir publish  \
    && cp main publish  \
    && cp -r conf publish

# 指定运行时环境变量
ENV GIN_MODE=release
EXPOSE 3000

ENTRYPOINT ["./main"]

ADD和COPY命令

COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。比如:

COPY package.json /usr/src/app/

ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能。

  • 源文件如果是 url会自动下载文件,如果文件是压缩包需要通过RUN指令来解压
  • 如果源文件是压缩包,会自动解压缩

CMDENTRYPOINT命令

CMD 指令就是用于指定默认的容器主进程的启动命令的。有execshell两种格式

ENTRYPOINT指令与CMD指令非常类似。

但是CMD指令会在启动容器时被覆盖, ENTRYPOINT指令提供的命令则不容易在启动容器时被覆盖。实际上,docker run命令中指定的任何参数都会被当做参数再次传递给ENTRYPOIINT指令中指定的命令。

  • curl -i
  • ls -l -a
0

评论区