基础命令:
启动 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 a4ce2dcf6cc9redis 客户端连接命令:
[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 lslocal 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 Mac
、Docker for Windows
自带 docker-compose
二进制文件,安装 Docker 之后可以直接使用。
$ docker-compose --versiondocker-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-composeDownloading 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: alwaysimage: tomcatcontainer_name: tomcatports:- 8080:8080volumes:- /usr/local/docker/tomcat/webapps/test:/usr/local/tomcat/webapps/testenvironment:TZ: Asia/Shanghai
基于 Docker 安装 MySQL:
- MySQL5:
version: '3.1'
services:mysql:restart: alwaysimage: mysql:5.7.22container_name: mysqlports:- 3306:3306environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456command:--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: mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: 123456command:--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1ports:- 3306:3306volumes:- ./data:/var/lib/mysqladminer:image: adminerrestart: alwaysports:- 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: alwaysimage: nexus3:latestcontainer_name: nexusports:- 8081:8081volumes:- /usr/local/docker/nexus/data:/nexus/data
- 启动时如果出现权限问题可以使用:
chmod 777 /usr/local/docker/nexus/data赋予数据卷目录可读可写的权限
- 登录控制台验证安装:
地址:http://ip:port/
用户名:admin
密码:admin123