这是学习Docker的笔记(极简命令版)
额,主要今天有点累,偷个懒,发一下学习docker的命令笔记
文章目录
须知
什么是docker?
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术;
CentOS7安装docker
第一步、卸载旧的docker版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engline-selinux \
docker-engine
第二步、安装CE版(免费版)docker开始,首先安装docker的仓库
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
安装需要的安装包yum-utils
$ sudo yum install -y yum-utils
设置镜像仓库地址,Docker的Yum源:阿里云的镜像仓库地址
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ sudo yum-config-manager --enable docker-ce-nightly # 一般不需要执行
$ sudo yum-config-manager --enable docker-ce-test # 一般不需要执行
$ sudo yum-config-manager --disable docker-ce-nightly # 一般不需要执行
更新yum索引
yum makecache fast
安装Docker CE(免费版)
$ sudo yum -y install docker-ce \
docker-ce-cli \
containerd.io
配置使用阿里云镜像加速器(去自己的阿里云控制台获取)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hcynqs5o.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
查询配置情况:
ps -sf | grep docker
# centos7可通过如下命令,观察Registry即可
docker info
docker的常用命令
启动docker
systemctl start docker
停止docker
systemctl stop docker.socket
帮助命令
验证docker版本
docker version
docker的信息描述,相比于version更全面
docker info
docker的帮助命令
docker --help
镜像命令
列出本地主机上的镜像
docker images [OPTIONS]
执行结果的各个选项说明
REPOSITORY | TAG | IMAGE ID | CREATED | SIZE |
---|---|---|---|---|
表示镜像的仓库源 | 镜像的标签 | 镜像ID | 镜像创建时间 | 镜像大小 |
需要注意:同一仓库源可以有多个TAG,代表这个仓库源的不同个版本,我们使用REPOSITORY:TAG
来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只使用ubuntu, docker
将默认使用ununtu:latest
镜像;
常用参数OPTIONS说明:
-a | -q | –digests | –no-trunc |
---|---|---|---|
列出本地所有的镜像(含中间映像层) | 只显示镜像ID | 显示镜像的摘要信息 | 显示完整的镜像信息 |
查询大仓库(https://hub.docker.com)中某个镜像的信息
docker search [OPTIONS] 某个镜像的名字 # 如:docker search tomcat
执行结果的各个选项说明:
NAME | DESCRIPTION | STARS | OFFICIAL | AUTOMATED |
---|---|---|---|---|
镜像名 | 描述 | 收藏 | 是否官方 |
常用参数OPTIONS说明:
–filter stars=指定值 | –no-trunc | –automated |
---|---|---|
列出收藏数不小于指定值的镜像 | 显示完整的镜像描述 | 只列出automated build类型的镜像 |
下载镜像
docker pull 某个镜像的名字[:TAG] # 如:docker pull tomcat(此时会下载最新版的latest) 或者 docker pull tomcat:8.5.54(此时会下载指定版本的)
删除镜像
docker rmi 本机的某个镜像名[:TAG] # 如 docker rni tomcat(此时会删除本机最新版的latest) 或者 docker rmi tomcat:8.5.54(此时会删除本机指定版本的镜像)
删除单个镜像:docker rmi -f 镜像ID
删除多个镜像:docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除全部镜像:docker rmi -f $(docker images -qa)
运行镜像(在保证docker启动的前提下)
docker run 镜像 # 如:docker run hello-world
容器命令
须知:有镜像才能创建容器,这是根本前提(这里在docker中下载一个CentOS镜像演示)——docker pull centos
新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用的参数OPTIONS:
–name=“容器新名字” | -d | -i | -t | -P | -p |
---|---|---|---|---|---|
为容器指定一个名称 | 后台运行容器,并返回容器ID,也即启动守护式容器 | 以交互模式运行容器,通常与-t同时使用 | 为容器重新分配一个伪输入终端,通常与-i同时使用 | 随机端口映射 | 指定端口映射,有以下四种格式:ip:hostPost:containerPort、ip::containerPort、hostPort:containerPort、containerPort |
查询docker中所有正在运行的容器
docker ps [OPTIONS]
常用的参数OPTIONS
-a | -l | -n | -q | –no-trunc |
---|---|---|---|---|
列出当前所有正在运行的容器 + 历史上运行过的 | 显示最近创建的容器 | 显示最近n个创建的容器 | 静默模式,只显示容器编号 | 不截断输出 |
退出容器
方式一、exit
此时容器会停止再退出;
方式二、ctrl + P + Q
此时容器不停止退出
启动容器
docker start 容器ID或者容器名
重启容器
docker restart 容器ID或者容器名
停止容器
docker stop 容器ID或者容器名
强转停止容器
docker kill 容器ID或者容器名
删除已停止的容器
docker rm 容器ID
一次性删除所有正在容器
docker rm -f $(docker ps -a -q)
或者
docker ps -a -q | xargs docker rm
*启动守护使容器
docker run -d 容器名
*查看容器日志
docker logs -f -t --tail 容器ID
解释上述的参数:
-t | -f | –tail 数值 |
---|---|---|
是加入时间戳 | 跟随最新的日志打印 | 数字显示最后多少数值条 |
*查看容器内运行的进程
docker top 容器ID
*查看容器内部细节
docker inspect 容器ID
*进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell # bashShell表示Linux的命令行,即docker内的容器可使用的Linux命令行,如对于一个centos容器,可使用:docker exec -it 容器ID ls -l /tmp
重新进入正在运行的docker容器
docker attach 容器ID
上述两个区别:attach:直接进入容器启动命令的终端,不会启动新的进程;exec:是在容器中打开新的终端,并且可以启动新的进程;
*从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
docker镜像的commit操作
提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
容器数据卷内添加的常用命令
使用命令向容器添加
docker run -it -v /宿主机绝对路径目录:/容器的目录 镜像名
查看数据卷是否挂载成功
docker inspect 容器ID # 通过查看执行结果的KEY为Volumes、VolumesRW的值即可,centos7在Mounts的JSON串中观察
*Volumes:*指明该容器的数据卷目录绑定的是宿主机的哪个目录;
*VolumesRW:*指明该容器对容器数据卷目录是否可读可写;
*容器和宿主机之间数据共享?*可以
*容器停止退出后,主机修改后数据是否同步?*可以
命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名 # 此时容器内的数据卷目录就是只读的
需要注意:此时;如果VolumesRW(Centos版本的是RW为false),表示该容器的数据卷不是读写均可的;
DockerFile添加
通过一个例子展示:
*步骤一:*新建一个目录用来存放DockerFile文件(这里是新建/home/my_dockerFile
目录),并在该新建的目录下创建DockerFile文件(这里新建dockerFile1
文件),内容如下:
# volume test
FROM centos
VOLUME ["conta_volumeData1", "conta_volumeData2"]
CMD echo "finshed, ----success!!!"
CMD /bin/bash
*步骤二:*使用命令对该DockerFile进行编译以产生新的镜像,如下命令:
docker build -f dockerFile的文件的路径 -t 编译后的镜像名 .
此时就已经构建好一个镜像了:通过docker images 编译后的镜像名
命令查看;
*步骤三:*因为在该镜像是通过我们定义DockerFile文件构建的,有我们编写的内容,内部有这样一句话:VOLUME ["conta_volumeData", "conta_volumeData"]
,表示通过该镜像创建容器时使用的数据卷;此时通过该镜像创建容器并运行,通过如下命令:
docker run -it 编译后的镜像名
此时进入容器后会发现容器中有DockerFile文件内指定好的VOLUME数据卷;
*步骤四:*这些指定好的每一个数据卷目录默认会与宿主机一个的/var/lib/docker/volumes/随机的ID/_data
目录进行绑定,其特征与上面使用命令创建的数据卷一样
数据卷容器
重要:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止!
DockerFile的解析
保留字指令
FROM:基础镜像,当前新镜像基于哪个镜像
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:镜像构建时需要运行的命令
EXPOSE:当前容器对外暴漏出的端口号
WORKDIR:指定在创建容器后,终端默认登录的进来工作目录,即一个落脚点
ENV:用来在构建镜像过程中设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY:
类似ADD命令,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内<目标路径>位置;如:
COPY src dest
COPY ["src", "dest"]
VOLUME:容器数据卷,用于数据保存和持久化工作
CMD:
指定一个容器启动时要运行的命令;
DockerFile中可以有多个CMD指令,但只有最后一个生效,CMD会被 docker run
之后的参数替换
ENTRYPOINT:
指定一个容器启动时要运行的命令
ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数(多个指令时不会出现覆盖,而是追加到最后)
ONBUILD:当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
总结图
BUILD | BOTH | RUN |
---|---|---|
FROM | WORKDIR | CMD |
MAINTAINER | USER | ENV |
COPY | EXPOSE | |
ADD | VOLUME | |
RUN | ENTRYPOINT | |
ONBUILD | ||
.dockerignore |
docker的卸载
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker