ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Docker技术学习 基于CentOS系统

2020-11-24 00:01:04  阅读:170  来源: 互联网

标签:容器 基于 run CentOS nginx ubuntu 镜像 docker Docker


Docker安装

国内 daocloud 一键安装命令

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

使用

# 看到客户端所有选项
docker
# 查看指定命令使用方法
docker command --help
# 启动 docker
service docker start
# 载入Ubuntu镜像 本地没有 就会下载一个镜像
docker pull ubuntu
# 启动容器
docker run -it ubuntu /bin/bash
# 退出容器
exit
# 查看所有容器
docker ps -a
# 启动一个已停止的容器  b750bbbcfd88 容器ID
docker start b750bbbcfd88 
# 后台运行容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
# 停止一个容器
docker stop 容器ID
# 重启一个容器
docker restart 容器ID
# 进入容器 在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入
docker attach 容器ID
docker exec -it 容器ID /bin/bash
# 导出容器 导出容器 1e560fca3906 快照到本地文件 ubuntu.tar
docker export 1e560fca3906 > ubuntu.tar
# 导入容器快照 将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
# 可以通过指定 URL 或者某个目录来导入
docker import http://example.com/exampleimage.tgz example/imagerepo
# 删除容器
docker rm -f 容器ID
# 运行一个web应用
# 载入镜像
docker pull training/webapp
# 运行一个Python Flask应用
docker run -d -P training/webapp python app.py
-d:让容器在后台运行。
-P:将容器内部使用的网络端口随机映射到我们使用的主机上。
# 查看正在运行的容器 ports会展示出端口信息
docker ps
# 通过-p设置不一样的端口
docker run -d -p 5000:5000 training/webapp python app.py
# 查看指定ID/名字的端口
docker port 容器ID/名字
# 查看WEB应用程序日志
docker logs 容器ID或者名字 
# 查看WEB应用程序容器的进程
docker top 容器名称
# 检查WEB应用程序
docker inspect 容器名称
# 停止容器
docker stop 容器名称
# 重启已经停止的WEB应用容器
docker star 容器名称
# 查询最后一次创建的容器
docker ps -l 
# 删除容器时,容器必须是停止状态,否则会报错

镜像

# 列出镜像列表
docker images
# 使用某个版本的镜像
docker run -t -i ubuntu:x.x /bin/bash 
# 获取新镜像
docker pull ubuntu:x.x
# 查找镜像  一个 httpd 的镜像
docker search httpd
# 删除镜像
docker rmi ubuntu

# 当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
1、从已经创建的容器中更新镜像,并且提交这个镜像
2、使用 Dockerfile 指令来创建一个新的镜像

# 1.在运行的容器内使用 apt-get update 命令进行更新。在完成操作之后,输入 exit 命令来退出这个容器。
# 2.构建镜像

容器连接

# 指定容器IP地址
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
# 查看端口绑定情况
docker port 容器名 5000
# 使用 --name 标识来命名容器
docker run -d -P --name runoob training/webapp python app.py

# 创建一个新的 Docker 网络。
docker network create -d bridge test-net

仓库管理

# 注册
# 在 https://hub.docker.com 免费注册一个 Docker 账号。

# 登录登出
docker login
docker logout

# 通过 docker push 命令将自己的镜像推送到 Docker Hub
docker tag ubuntu:18.04 username/ubuntu:18.04

Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明

FROM:定制的镜像都是基于 FROM 的镜像。

RUN:用于执行后面跟着的命令行命令。有以下俩种格式:
1.shell 格式:
RUN <命令行命令>
# <命令行命令> 等同于,在终端操作的 shell 命令。
exec 格式:
2.RUN ["可执行文件", "参数1", "参数2"]
# 例如:
# RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline

COPY
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
格式:
COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",...  "<目标路径>"]
[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
COPY hom* /mydir/
COPY hom?.txt /mydir/
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

ADD
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

CMD
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。
格式:
CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 
CMD ["<param1>","<param2>",...]  # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数

ENTRYPOINT
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
格式:
ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

示例:
假设已通过 Dockerfile 构建了 nginx:test 镜像:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

1、不传参运行
$ docker run  nginx:test
容器内会默认运行以下命令,启动主进程。
nginx -c /etc/nginx/nginx.conf

2、传参运行
$ docker run  nginx:test -c /etc/nginx/new.conf
容器内会默认运行以下命令,启动主进程(/etc/nginx/new.conf:假设容器内已有此文件)
nginx -c /etc/nginx/new.conf

ENV
设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
格式:
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...

ARG
构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
格式:
ARG <参数名>[=<默认值>]

VOLUME
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
作用:
避免重要的数据,因容器重启而丢失,这是非常致命的。
避免容器不断变大。
格式:
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

EXPOSE
仅仅只是声明端口。
作用:
帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。
格式:
EXPOSE <端口1> [<端口2>...]

WORKDIR
指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
格式:
WORKDIR <工作目录路径>

USER
用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
格式:
USER <用户名>[:<用户组>]

HEALTHCHECK
用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
格式:
HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。

ONBUILD
用于延迟构建命令的执行。简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次构建镜像的过程中不会执行(假设镜像为 test-build)。当有新的 Dockerfile 使用了之前构建的镜像 FROM test-build ,这是执行新镜像的 Dockerfile 构建时候,会执行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。
格式:
ONBUILD <其它指令>

Docker Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

Compose 安装

运行以下命令以下载 Docker Compose 的当前稳定版本:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。

将可执行权限应用于二进制文件:

$ sudo chmod +x /usr/local/bin/docker-compose

创建软链:

$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:

$ docker-compose --version
cker-compose version 1.24.1, build 4667896b

注意: 对于 alpine,需要以下依赖包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。

Docker Machine

安装 Docker Machine 之前你需要先安装 Docker。

Linux 安装命令
$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

查看是否安装成功:

标签:容器,基于,run,CentOS,nginx,ubuntu,镜像,docker,Docker
来源: https://blog.csdn.net/qq_46253184/article/details/110013325

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有