docker实战(docker实战第二版pdf)

  本篇文章为你整理了docker实战(docker实战第二版pdf)的详细内容,包含有docker实战派 docker实战第二版pdf docker实战 pdf docker实战派电子书 docker实战,希望能帮助你了解 docker实战。

  默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组

  

# 建立docker用户组

 

  $ sudo groupadd docker

  # 将用户加入到docker用户组中

  $ sudo usermod -aG docker [$USER 用户名]

  

 

  二、docker镜像【重要】

  镜像是 Docker 的三大组件之一。

  Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。

  【重点】

  docker镜像与docker容器的区别

  ​ 镜像的一个实例称为容器。 你有一个镜像,这是你描述的一组图层。 如果你开始这个镜像,你有一个运行这个镜像的容器。 您可以拥有许多相同镜像的正在运行的容器。

  

# 查看所有镜像

 

  docker images

  # 查看正在运行的容器

  docker ps -a

  

 

  获取镜像

  

$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

 

  # 指定ubuntu版本下载

  docker pull ubuntu:18.04

  # 下载Ubuntu所有镜像

  docker pull -a ubuntu

  # 下载centos所有镜像

  docker pull -a centos

  

 

  docker交互式

  

// 进入docker交互式 用法和linux命令类似

 

  docker run -it --rm ubuntu bash

  

 

  列出镜像

  

docker image ls

 

  

 

  查看镜像文件大小

  

docker system df

 

  

 

  删除本地镜像

  

$ docker image rm [选项] 镜像1 [ 镜像2 ...]

 

  

 

  使用commit理解镜像

  docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用 docker commit 定制镜像,定制镜像应该使用 Dockerfile 来完成,

  简单来说docker commit就是在原来的镜像上面进行copy然后形成新的镜像

  

docker commit [选项] 容器ID或容器名 [ 仓库名 [: 标签 ]]

 

  # 栗子:

  $ docker commit \

   --author "Tao Wang twang2218@gmail.com " \

   --message "修改了默认网页" \

   webserver \

   nginx:v2

  sha256:07e33465974800ce65751acc279adc6ed2dc5ed4e0838f8b86f0c87aa1795214

  

 

  其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。这点和 git 版本控制相似,不过这里这些信息可以省略留空。

  三、使用dockerfile制作镜像

  ​ 从刚才的 docker commit 的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile

  Dockerfile 是一个文本文件,其内包含了一条条的 指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

  创建dockerfile

  

$ mkdir mynginx

 

  $ cd mynginx

  $ touch Dockerfile

  # 写入脚本

  FROM nginx // 指定镜像

  RUN echo h1 Hello, Docker! /h1 /usr/share/nginx/html/index.html

  

 

  FROM命令

  ​ 所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定 基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。

  RUN命令

  ​ RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。其格式有两种

  
shell 格式:RUN 命令 ,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。

  

# 执行脚本 单个

 

  RUN echo h1 Hello, Docker! /h1 /usr/share/nginx/html/index.html

  

 

  
exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式。

  

FROM debian:stretch

 

  # 批量执行脚本

  RUN apt-get update

  RUN apt-get install -y gcc libc6-dev make wget

  RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"

  RUN mkdir -p /usr/src/redis

  RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1

  RUN make -C /usr/src/redis

  RUN make -C /usr/src/redis install

  

 

  
exec格式虽然是批量执行脚本,但是上面脚本创建了七层镜像,是不合适的,那么正确的写法是: 使用 符号进行连接,把原来创建七层镜像变成了一层

  

FROM debian:stretch

 

  # \是shell脚本的末尾换行符

  RUN set -x; buildDeps=gcc libc6-dev make wget \

   apt-get update \

   apt-get install -y $buildDeps \

   wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \

   mkdir -p /usr/src/redis \

   tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \

   make -C /usr/src/redis \

   make -C /usr/src/redis install \

   rm -rf /var/lib/apt/lists/* \

   rm redis.tar.gz \

   rm -r /usr/src/redis \

   apt-get purge -y --auto-remove $buildDeps

  

 

  3.1、dockerfile指令详解【重要】

  FORM指令

  

FROM 系统[:镜像版本号]

 

  # 指定基础镜像,也是必须的!!!

  FROM ubuntu

  

 

  EXPOSE指令

  EXPOSE 指令是声明容器运行时提供服务的端口,这只是一个声明,在容器运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

  

# 指定 80端口命令

 

  EXPOSE 80

  

 

  RUN指令

  

# 指定下载安装包并更新软件包缓存

 

  RUN apt-get -qq update

  

 

  COPY复制文件

  

COPY [--chown= user : group ] 源路径 ... 目标路径 

 

  # 复制/home/test文件夹下所有文件到当前目录

  COPY /home/test/** .

  

 

  CMD指令

  CMD 指令的格式和 RUN 相似,也是两种格式:

  

shell 格式:CMD 命令 

 

  # 栗子:

  CMD echo hello world!

  CMD service nginx start

  exec 格式:CMD ["可执行文件", "参数1", "参数2"...]

  参数列表格式:CMD ["参数1", "参数2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

  

 

  ENV指令

  格式有两种:

  

ENV key value 

 

  ENV key1 = value1 key2 = value2 ...

  # 栗子:

  ENV VERSION=1.0 DEBUG=on \

   NAME="Happy Feet"

  

 

  ADD复制文件(高级用法)

  

# 与COPY指令类似,复制某个文件夹下所有文件到/mydir

 

  ADD --chown=55:mygroup files* /mydir/

  ADD --chown=bin files* /mydir/

  ADD --chown=1 files* /mydir/

  ADD --chown=10:11 files* /mydir/

  

 

  总结:

  

# FROM:作为基础镜像

 

  FROM ubuntu

  # 使用RUN指令下载安装包等等,连接使用

  RUN apt-get -qq update \

   COPY /home/test/** . \

  # EXPOST 8080

   RUN echo hello, dockerfile

  

 

  那么镜像制作完成了,就应该进行构建镜像

  

# docker build -t=【tag信息】 【dockerfile路径】

 

  docker build [选项] 上下文路径/URL/-

  # 栗子:

  docker build -t nginx:v3 .

  

 

  四、操作容器

  新建并启动一个容器

  

# 使用docker run命令携带脚本

 

  $ docker run ubuntu /bin/echo Hello world

  Hello world

  

 

  查看正在运行的docker容器信息

  

# 查看容器信息

 

  docker container ls

  

 

  查看容器日志【重要】

  

# 查看正在运行的容器

 

  docker ps -a

  # 拿到对应的容器id,使用docker logs 查看日志

  docker container logs [container ID or NAMES]

  # 查看实时日志

  docker logs -f [container ID or NAMES]

  

 

  操作容器(停止、启动、重启)

  

# 1.查看正在运行的容器

 

  docker ps -a

  # 2.停止正在运行的容器

  docker container stop [容器id]

  # 3.启动正在运行的容器

  docker container start [容器id]

  # 4.重启正在运行的容器

  docker container restart [容器id]

  

 

  进入容器

  

# 命令

 

  docker attach [容器id] / docker exec [容器id]

  # 进入容器并启用伪装终端

  docker exec -it [容器id] bash

  

 

  导入导出容器

  

# 1.查看容器

 

  docker container ls -a

  # 2.导出容器到本地文件

  docker export [容器id] ubuntu.tar

  # 3.导入容器

  docker import [目录/http链接]

  

 

  删除容器

  

# 1.查看所有容器

 

  docker container ls

  # 2.停止对应容器

  docker container stop [容器id]

  # 3. 删除对应容器

  docker container rm [容器id / 容器名]

  

 

  以上就是docker实战(docker实战第二版pdf)的详细内容,想要了解更多 docker实战的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: