0%

Docker学习笔记

Docker是一种类似虚拟机的容器,但是更轻量级,更方便。

他可以创建一个独立的环境,减少环境配置的工作。

Docker是2013年首次发布,是YC孵化的项目。

Docker Image

docker image映像文件包含所有app运行需要的文件,包括一个裁剪过的OS内核,第三方库,app的文件,环境变量等。container是执行image的环境,container是轻量级的虚拟机。

  1. 构建docker image
1
docker build -t <TAG>

build命令,相当于在一个全新的linux上,进行环境初始化工作,让自己的应用代码可以在一个非常干净的环境下运行。

  1. Docker File

build命令是根据Dockerfile进行构建。Dockerfile相当于是安装脚本,由若干命令组成,其中包括:

FROM : 从哪个基础image开始构建

WORKDIR : 设置工作目录

COPY : 拷贝文件到image中

ENV:设置环境变量,在build,和运行期间都有效

RUN:build 期间执行的命令

VOLUME:建立一个外部的逻辑目录,mount到container中,避免数据被删除

EXPOSE:把内部端口映射到container的外部

CMD:image在运行时执行的命令,可以被docker run命令行覆盖。

ENTRYPOINT:也是image运行时的命令,不会被覆盖,必须执行这个,CMD作为这个命令的参数。

  1. 查看image
1
docker image ls
  1. 删除docker image

docker image prune:删除无用的image

docker image rm <TAG>:删除指定的image

Docker Container

container是一种进程,通过linux内核的对container的特殊支持,实现环境隔离。一个image可以被多个container执行,container有自己的file system。

  1. docker run 创建一个container

    • -d :后台运行

    • –name:制定一个名字,方便其他命令行操作

    • -p:端口映射

    • -v :相当于指定外置的硬盘

  2. docker ps 查看当前运行中的container

  3. docker logs 查看某个container的log

    • -f:持续更新log
    • -t:打上timestamp
  4. docker exec -it <container name> <command>

可以从对运行中的container执行命令,也能通过sh登录上去

  1. docker container prune 删除没用的container

  2. docker [start|stop] <container name> 启动和停止某个container

  3. docker volumn create <name> , 建立volume,相当于创建一块额外的硬盘

  4. docker cp <container ID>:/path <local path> docker和本地进行文件拷贝

Docker Compose

docker-compose就是把多个container一起执行起来,并且能够相互配合。通过docker-compose.yml文件配置相关服务。主要命令有:

  1. docker-compose build build image

  2. docker-compose up 启动服务

  3. docker-compose down 关闭服务

  4. docker-compose logs

这样其实相当于在开发时,有了一个集群一样方便。因为每个服务都是独立的,互不干扰,又能相互通信。配置文件的命令基本和Dockerfile的含义一致,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: '3'
services:
postgres:
image: postgres:11.5-alpine
ports:
- '127.0.0.1:5432:5432'
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 1s
elasticsearch:
image: hypothesis/elasticsearch:latest
ports:
- '127.0.0.1:9200:9200'
environment:
- discovery.type=single-node
rabbit:
image: rabbitmq:3.6-management-alpine
ports:
- '127.0.0.1:5672:5672'
- '127.0.0.1:15672:15672'