Docker的相关操作
最近在研究Docker,终于有了一点点的成果,这里进行笔记一下,用以备忘。
1.对于镜像的基本操作
使用Docker,需要熟悉对镜像的基本操作,其中常见的包含下列操作:
docker pull 镜像名 # 从远程仓库拉取镜像
docker save -o [存档名.tar] [需要备份的镜像名称] # 将镜像存档为tar文件
docker load -i [存档名.tar] # 将镜像导入进docker
docker images [-a] # 查看Docker中的[全部]镜像
docker rmi [镜像名] # 干掉对应镜像名的镜像
docker exec -it [镜像名] /bin/bash # 进入镜像中并分配一个伪终端
docker exec -it [容器ID] /bin/bash # 进入容器中并分配一个伪终端
docker build -t [镜像名:镜像版本号] . # 新建一个镜像
docker build -f [Dockerfile路径] . # 通过Dockerfile创建镜像
docker ps [-a] # 查看该服务器中的[全部]镜像
2.制造自己的镜像
Dockerfile是自制镜像的基础,若想创建自己的镜像,以及操作镜像,则需要懂得Dockerfile指令的使用。
2.1 前提
想要制造一个属于自己的镜像,首先需要一个基础镜像。基础镜像,可通过中央镜像库下载获得,若要查询,你可以访问 https://hub.docker.com/search 来查询你需要运行的脚本的前置环境。
你可以通过 docker pull [镜像名] 的命令将镜像拉取到本地,或者,无论你是制造自己的镜像,还是启动一个你所知的镜像,Docker都会帮助你自动的拉取远程中央镜像库的镜像,将它下载到本地运行(前提是电脑是联网状态的)。
当要运行服务器没有网络的时候,可以通过Docker镜像的导入导出操作来进行基础镜像的拷贝。
因此,你需要有一个最基础的镜像,才能够让你的程序在Docker中顺利运行。
2.2 Dockerflie指令
这里仅仅罗列了Dockerfile的最常用的指令【写在Dockerfile文件中的指令】,用于构建Docker镜像。
FROM <image>[:<tag>] # 必须在Docker的首行 用于指定基础镜像以及基础版本
MAINTAINER <name> # 镜像作者信息 【非必要】
RUN <command> # 在镜像中运行的指令
ADD <w_src> <j_src> # 将相对于Dockerfile的w_src路径下的文件/文件夹添加到镜像的j_src路径下 【tar包中的内容不会被解压】
COPY <w_src> <j_src> # 将相对于Dockerfile的w_src路径下的文件/文件夹添加到镜像的j_src路径下 【tar包中的内容会被解压】
CMD <command> # 启动容器时执行的命令
ENV <key>=<value> # 在容器中配置环境变量
EXPOSE <port> [<port>...] # 在容器中配置端口号
VOLUME <path> # 在镜像中创建目录
WORKDIR <path> # 切换镜像中的工作目录
3.使用Docker容器
虽然使用容器的方式可以通过Docker命令的方式直接启动容器,但并不推荐这么操作。这里推荐使用docker-compose来进行Docker容器的启动,关闭,重启等一系列的操作。
3.1 docker-compose指令
常用的docker-compose指令【直接执行的指令】如下:
docker-compose ps # 列出所有运行的容器
docker-compose logs # 查看服务日志输出
docker-compose build # 通过当前目录下的docker-compose.yml文件构建容器
docker-compose start [容器名] # 启动指定服务已存在的容器
docker-compose stop [容器名] # 停止已经运行的服务的容器
docker-compose rm [容器名] # 删除指定服务的容器
docker-compose up # 依据docker-compose.yml文件来构建并启动容器
docker-compose down # 依据docker-compose.yml文件来关闭并删除容器
3.2 docker-compose基本语法
services: # 下面跟着各个的服务配置
container_name: '[容器名]' # 指定容器名 【非必要】
image: '[镜像名]' # 指定启动时所使用的镜像名
restart: always # 指定镜像是否是一致重启
ports: # 指定映射出的端口号对应
- [外部端口]:[镜像内端口]
volumes: # 指定映射出的文件系统路径
- [外部路径]:[镜像内路径]
environment: # 容器中的环境变量
- [环境变量名]:[环境变量值]