实用网站:
https://segmentfault.com/a/1190000009544565
https://www.jianshu.com/p/0231568ab335
https://yeasy.gitbooks.io/docker_practice/
https://docs.docker.com/engine/reference/commandline/run/
基本概念
镜像(Image):一个特殊的文件系统,提供容器运行时所需的程序/库/资源/配置等文件。镜像不包含任何动态数据,内容在创建之后也不会被改变。
分层存储:镜像构建时,采用分层构建,前一层时后一层的基础,因此每一层都应该尽量只包含该层需要添加的东西。每一层构建完成之后就不会再发生改变,后一层上的任何更改只会发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。
容器(Container):镜像和容器的关系就像是类与实例之间的关系。容器是镜像运行时的实体,实质是进程,运行于属于自己的独立的命名空间(是在自己独立的隔离环境中)。每一个容器在运行时,都以镜像为基础层,在其上建立一个当前容器的存储层。该存储层与容器的生存周期相同,一般不往其中写任何数据(数据保存至数据卷中,数据卷由容器启动时由-v指定)。
仓库(Repository):每个仓库可以包含多个标签,一个标签对应一个镜像。默认标签为latest。通常一个仓库包含同一个软件的不同版本的镜像。可以通过 <仓库名>:<标签>
的格式来指定具体是这个软件哪个版本的镜像。
查看所有的docker命令: docker -h
使用镜像
获取镜像
docker pull [option] NAME[:TAG|@DIGEST]
docker pull [option] [Docker Registry地址[:端口号]/]仓库名[:标签]
eg:docker pull daocloud.io/library/node //从docker镜像中心下载Node镜像,不加标签默认下载lasted
查看所有镜像
docker images
删除本地镜像
docker rmi [option] IMAGE [IMAGE ...]
使用容器
查看正在运行的容器
docker ps
进入容器
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
eg:docker exec -it nginx /bin/bash //以交互式终端的方式进入容器
启动容器
docker run [options] IMAGE [COMMAND] [ARG...]
options:
-t 启动伪终端
-i 交互式运行
-d 以守护进程的形式运行
-e 设置环境变量 var=value 可以多次设置
--name 设置容器名字
--net 设置容器与宿主机的网络形式
-c 进入容器首先执行的命令eg:/bin/bash -c “cd /home && /sbin/init”
-v 创建一个数据卷并挂载在容器上
-P 随机映射本地的一个端口到docker容器开放的网络端口
-p 指定要映射的端口 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort.
-b <BRIDGE> 指定容器挂载的网桥
-H <SOCKET> Docker服务器端接收命令通道
(所运行的镜像名,一般在/bin/bash之前说明,-c一般为docker run语句指定的最后一项)
获取容器的输出信息
docker logs <CONTAINER ID>|<NAMES>
终止容器
docker stop <CONTAINER ID>|<NAMES>
启动已终止的容器
docker start <CONTAINER ID>|<NAMES>
重启容器
docker restart <CONTAINER ID>|<NAMES>
查看容器的存储层变动
docker diff
删除一个处于终止状态的容器
docker rm <CONTAINER ID>|<NAMES>
删除一个在运行中的容器
docker rm -f <CONTAINER ID>|<NAMES>
-f 表示强制删除
退出容器 exit
保存容器及其存储层构成新镜像(慎用)
docker commit [选项] <容器ID或容器名> [仓库名[:标签]]
使用Dockerfile定制镜像
https://yeasy.gitbooks.io/docker_practice/image/build.html
在Dockerfile文件所在的目录执行 docker build -t 仓库名:标签 .
Dockerfile中常用命令
FROM 基础镜像
RUN 用来执行命令行命令
问题
1.在docker中使用systemctl
在docker容器启动时,必须指定--privileged -c /sbin/init
2.docker容器与宿主机进行文件互传
在宿主机的命令行运行:docker cp path <container id>:path
或 docker cp <container id>:path path
将左边path中的内容拷贝至右边