数据卷、YAML、Dockerfile 与 Docker-Compose

本文详细介绍Docker的基础命令操作,包括服务启动、镜像管理、容器运行与控制,以及数据卷的使用。同时,深入讲解Dockerfile、Docker Compose的使用方法,和如何基于Docker安装Tomcat、MySQL及Nexus。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础命令:

启动 docker 服务:
[root@localhost ~]# systemctl start docker && systemctl enable docker

下载镜像:
[root@localhost ~]# docker pull 10.9.10.232:5000/redis:5.0.4

查看本地的镜像:
[root@localhost ~]# docker images

镜像重命名:
docker tag IMAGEID 新镜像名称:新标签
[root@localhost ~]# docker tag 4842 centos7:1.0
docker tag 镜像名:tag 新镜像名称:新标签
[root@localhost ~]# docker tag hello-world:latest hello-world:1.1

运行 docker:
[root@localhost ~]# docker run -itd -p 6379:6379 redis:5.0.4 4161e91dcc29

查看 docker 的进程:
[root@localhost ~]# docker ps
查看 docker 的所有进程:
[root@localhost ~]# docker ps -a

开启 docker 的进程:
[root@localhost ~]# docker start a4ce2dcf6cc9
重启 docker 的进程:
[root@localhost ~]# docker restart a4ce2dcf6cc9

停止指定 docker 进程:
[root@localhost ~]# docker stop d854a73518fb 28c29de4c487

删除 docker 实例:
[root@localhost ~]# docker rm a4ce2dcf6cc9

redis 客户端连接命令:
[root@localhost ~]# docker exec -it 95abb7fb1e74 redis-cli

 

数据卷:

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷 可以在容器之间共享和重用;

对 数据卷 的修改会立马生效;

对 数据卷 的更新,不会影响镜像;

数据卷 默认会一直存在,即使容器被删除。

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的 数据卷。

  • 选择 -v 还是 -–mount 参数:

Docker 新用户应该选择 --mount 参数,经验丰富的 Docker 使用者对 -v 或者 --volume 已经很熟悉了,但是推荐使用 --mount 参数。

  • 创建一个数据卷:
$ docker volume create my-vol
  • 查看所有的数据卷:
$ docker volume ls

local             my-vol
  • 在主机里使用以下命令可以查看指定的数据卷信息:
$ docker volume inspect my-vol
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]
  • 启动一个挂载数据卷的容器:

在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker run 中可以挂载多个 数据卷

创建一个名为 web 的容器,并加载一个 数据卷 到容器的 /webapp 目录:

$ docker run -d -P \
    --name web \
    # -v my-vol:/wepapp \
    --mount source=my-vol,target=/webapp \
    training/webapp \
    python app.py
  • 查看数据卷的具体信息:

在主机里使用以下命令可以查看 web 容器的信息:

$ docker inspect web
  • 数据卷 信息在 "Mounts" Key 下面:
"Mounts": [
    {
        "Type": "volume",
        "Name": "my-vol",
        "Source": "/var/lib/docker/volumes/my-vol/_data",
        "Destination": "/app",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],
  • 删除数据卷:
$ docker volume rm my-vol

数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker 不会在容器被删除后自动删除 数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的 数据卷。如果需要在删除容器的同时移除数据卷。可以在删除容器的时候使用 docker rm -v 这个命令。

无主的数据卷可能会占据很多空间,要清理请使用以下命令:

$ docker volume prune

 

YAML:

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。

YAML 语言的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。它的基本语法规则如下:

1、大小写敏感;

2、使用缩进表示层级关系;

3、缩进时不允许使用Tab键,只允许使用空格。

缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

# 表示注释,从这个字符一直到行尾,都会被解析器忽略。

  • YAML 支持的数据结构有三种:

对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)

数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

纯量(scalars):单个的、不可再分的值

  • 对象

对象的一组键值对,使用冒号结构表示:

animal: pets
  • 数组:

一组连词线开头的行,构成一个数组:

- Cat
- Dog
- Goldfish

数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:

- Array
 - Cat
 - Dog
 - Goldfish
  • 复合结构:

对象和数组可以结合使用,形成复合结构:

languages:
 - Ruby
 - Perl
 - Python 
websites:
 YAML: yaml.org 
 Ruby: ruby-lang.org 
 Python: python.org 
 Perl: use.perl.org 
  •  纯量:

纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量:

字符串、布尔值、整数、浮点数、Null、时间、日期

 

Dockerfile:

我们可以把刚才的对容器的所有操作命令都记录到一个文件里,就像写脚本程序,之后用 docker build 命令以此文件为基础制作一个镜像,并会自动提交到本地仓库。这样的话镜像的构建会变的透明化,维护也更加简单,只修改这个文件即可,同时分享也更加简单快捷,因为只要分享这个文件即可。 

FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]

 

Docker Compose:

Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟 OpenStack 中的 Heat 十分类似。其代码目前在 https://github.com/docker/compose 上开源。

Compose 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

使用一个 Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有两个重要的概念:

服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷的生命周期管理。

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。

Compose 支持 Linux、macOS、Windows 10 三大平台。

Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。

前两种方式是传统方式,适合本地环境下安装使用;最后一种方式则不破坏系统环境,更适合云计算场景。

Docker for MacDocker for Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。

$ docker-compose --version

docker-compose version 1.25.0-rc1, build 8552e8e2

 Linux 系统请使用以下介绍的方法安装:

  • 二进制包:

在 Linux 上的安装也十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可。

例如,在 Linux 64 位系统上直接下载对应的二进制包。

$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
  • PIP 安装:

注: x86_64 架构的 Linux 建议按照上边的方法下载二进制包进行安装,如果您计算机的架构是 ARM (例如,树莓派),再使用 pip 安装。这种方式是将 Compose 当作一个 Python 应用来从 pip 源中安装。执行安装命令:

$ sudo pip install -U docker-compose

可以看到类似如下输出,说明安装成功:

Collecting docker-compose
  Downloading docker-compose-1.17.1.tar.gz (149kB): 149kB downloaded
...
Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress
  •  容器中执行(安装):
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

它其实是下载了 docker/compose 镜像并运行 。

  • 卸载:
如果是二进制包方式安装的,删除二进制文件即可。
$ sudo rm /usr/local/bin/docker-compose
如果是通过 `pip` 安装的,则执行如下命令即可删除。
$ sudo pip uninstall docker-compose
  • 使用:
前台运行:
docker-compose up
后台运行:
docker-compose up -d

启动:
docker-compose start

停止:
docker-compose stop

停止并移除容器:
docker-compose down

 

基于 Docker 安装 Tomcat:

version: '3.1'
services:
  tomcat:
    restart: always
    image: tomcat
    container_name: tomcat
    ports:
      - 8080:8080
    volumes:
      - /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/test
    environment:
      TZ: Asia/Shanghai

 

基于 Docker 安装 MySQL:

  • MySQL5:
version: '3.1'
services:
  mysql:
    restart: always
    image: mysql:5.7.22
    container_name: mysql
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
    volumes:
      - mysql-data:/var/lib/mysql
  • MySQL8:
version: '3.1'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - ./data:/var/lib/mysql

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

 

基于 Docker 安装 Nexus:

  • Maven:

版本策略(Version Policy):1、Release:正式版本             2、Snapshot:快照版本             3、Mixed:混合模式

宿主仓库(Hosted Repository):存储本地上传的组件和资源,如:maven-releases、maven-snapshots、nuget-hosted

仓库组(Repository Group):通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包

  • 安装:
version: '3.1'
services:
  nexus:
    restart: always
    image: nexus3:latest
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/data:/nexus/data
  • 启动时如果出现权限问题可以使用:
chmod 777 /usr/local/docker/nexus/data

赋予数据卷目录可读可写的权限 
  • 登录控制台验证安装:
地址:http://ip:port/
用户名:admin
密码:admin123

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值