https://www.cnblogs.com/wcwnina/p/13045810.html

Docker核心技术总结 之 主要操作命令

1、Docker的理念

官方宣称:“一次安装,到处运行”。也就是说,在Docker容器(集装箱)上只需要一次性配置好环境,换到别的机子上就可以一键部署好,大大简化了操作,保证了开发环境和生产环境的一致性。

2、虚拟机与Docker

虚拟机:模拟了整个操作系统,包括硬件配置和软件驱动等等。笨重,耗资源。
Docker:软件容器封装技术,只保留核心文件系统,可以简单理解为极简Linux系统。轻量,快捷。

3、安装(一般为Linux环境)

条件:64位系统,内核版本2.6.32及以上。
查看内核版本:uname -r

查看官方文档
CentOS:https://docs.docker.com/engine/install/centos/
Debian:https://docs.docker.com/engine/install/debian/

4、Docker三要素

镜像:一个只读的模板,类似于语言中的Class类。镜像一般是分层的,基于前一层但又相互独立。
容器:用镜像创建的应用实例,类似于语言中的实例对象。它可以被启动、停止、删除。每个容器都可看成极简Linux系统,且相互隔离。
仓库:存储镜像文件的场所。

5、国内镜像加速

1)先注册账号或者使用淘宝账号,登录搜索“镜像”关键字,点击第一个【容器镜像服务】,再点【管理控制台】,进入后左侧选择镜像加速器,复制加速地址。

2)可以通过修改daemon配置文件 /etc/docker/daemon.json 来使用加速器,加入以下内容:
{“registry-mirrors”: [“https://你的阿里云加速地址"]} # 如https://rv0ermrw.mirror.aliyuncs.com

3)重启Docker,$sudo service docker restart

4)查看是否使用了镜像加速,ps -ef|grep docker

6、Docker帮助命令

docker version:查看版本
docker info:显示Docker系统信息,包括镜像和容器数
docker —help:查看命令帮助

7、镜像命令

1)docker images [options]:列出本地镜像
options:
-a:所有镜像文件(包含中间层镜像)
-q:只显示镜像ID

2)docker search imgname:搜索Docker Hub上的镜像文件

3)docker pull imgname [:tag]:下载镜像文件
tag:镜像版本号,默认最新latest

4)docker rmi [options] imgID|imgname:删除镜像 # 操作镜像时,推荐用镜像ID
options:
-f:强制删除
docker rmi -f $(docker images -aq):删除所有镜像

8、容器命令

1)docker run [options] imgID|imgname:tag [command]:运行容器
options:
-i:以交互式模式运行容器,通常与-t同时使用,即-it
-t:为容器分配伪终端,通常与-i同时使用,即-it
-p:指定端口映射,hostPort:containerPort
-d:后台运行容器(注意:若后面没接命令语句,则会自动退出容器)
—name:容器命名

2)docker ps [options]:列出正在运行的容器
options:
-a:列出所有容器,包括历史运行的
-q:只显示容器ID
-l:显示最近创建的容器

3)exit:退出容器,并停止运行
Ctrl + P + Q:退出容器,并后台运行

docker attach contID|contname:重进容器
docker exec -it contID|contname [command]:不进入容器情况下执行一些命令

4)docker stop contID|contname:停止容器 # 操作容器时,推荐用容器ID
docker kill contID|contname:强制停止容器
docker start contID|contname:启动容器
docker restart contID|contname:重启容器

5)docker rm [options] contID|contname:删除容器
options:
-f:强制删除

docker rm -f $(docker ps -aq):删除所有容器

6)docker logs [options] contID|contname:查看容器日志
options:
-t:显示时间
-f:一直刷新显示
—tail n:显示尾部n行日志

docker top contID|contname:查看容器进程信息

docker inspect contID|contname:查看容器内部细节(如数据卷信息等)

7)docker cp contID|contname:容器内部路径 目标主机路径:将Docker文件拷贝到主机上

8)docker commit -a=”作者” -m=”提交信息” 容器ID 新镜像名[:版本]:提交容器副本,成为一个新的镜像文件

9、数据卷

容器产生的数据进行持久化。主机与容器、容器与容器之间实现数据共享,双向数据同步。可形象比喻成U盘。
生命周期:直到容器删除。

docker run -it -v 宿主机绝对路径:容器绝对路径[:options] imgID|imgname:运行容器,并添加数据卷
options:
:rw:可读可写(默认)
:ro:只读

docker run -it —volumes-from contID|contname imgID|imgname:运行容器,并从另一个容器上关联数据卷

10、DockerFile

docker build -f /mydockerfile -t myimgname:tag . :构建镜像文件。注意最后有个“.”,表示在mydockerfile同目录下

编写DockerFile指令(大写):
FROM:基础镜像,当前镜像是基于哪个镜像的。基础镜像scratch
MAINTAINER:作者姓名和邮箱
RUN:镜像构建时会执行的命令。注意,每个RUN命令都会生成一层镜像,最好用”&”来连接多个RUN
EXPOSE:对外暴露的端口
WORKDIR:运行容器后进入的工作目录
ENV:设置环境变量。可用$引用这个变量
COPY:纯拷贝到镜像
ADD:拷贝,会自动解压
VOLUME:添加数据卷
CMD:容器启动时会执行的命令。会被docker run后面的command覆盖
ENTRYPOINT:容器启动时会执行的命令。会被docker run后面的command追加
ONBUILD:当本镜像被继承时,会触发的操作

例:
—————————————————————————————————————
FROM centos
MAINTAINER wangchunwang

ENV path /usr/local
WORKDIR $path

RUN yum update \ # \换行符,&命令连接符
& yum install vim \ # 安装vim
& yum install net-tools # 安装ifconfig

EXPOSE 80

ENTRYPOINT echo $path
ENTRYPOINT echo OK,成功

ENTRYPOINT /bin/bash # 如果前面用了ENTRYPOINT,这里就不能用CMD,否则容器不会启动!?
—————————————————————————————————————

11、镜像导入导出

导出:docker save imgID|imgname:tag > imgfile.tar
导入:docker load < imgfile.tar

12、容器导入导出

导出:docker export contID|contname > contfile.tar
导入:docker import contfile.tar imgname:tag