本文记录了近两天开始学习docker基本操作的一些心得,进行小小的总结。
至于什么是docker,为什么使用docker,这里就不再赘述;
参考:
桀骜不驯的喵:《docker命令详解》
广州千锋:Docker-容器化引擎
##首先,卸载直接用yum install的docker(原因:yum库里的docker版本过低)
yum remove docker
yum remove docker-*
##更新yum,这个操作不是必须的,但是更新升级内核,更有利于docker对系统资源的利用
yum update
##安装相关依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lm2
##设置安装正式版docker-edge
yum-config-manager --enable docker-ec-edge
##添加阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
##安装docker
yum install docker-ce
##启动docker服务
systemctl start docker
##查看docker版本
docker version
##查看docker详细信息
docker info
因为国内网速问题,会导致在从docker hub拉取镜像时,速度过慢,甚至出现失败现象,这里我们可以使用镜像加速;
docker中国镜像加速
想要选取指定版本,可以参考docker hub的标签TAG
##使用镜像加速(docker中国)
##拉取centos官方镜像,不指定版本号,默认为latest版本
##docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
##Docker Registry 地址,默认为Docker Hub
##仓库名为两段式名称,即<用户名>/<软件名>。对于Docker Hub,默认为library,即官方镜像
docker pull registry.docker-cn.com/library/centos
docker images
##也可以使用docker image ls
##REPOSITORY TAG IMAGE ID CREATED SIZE
##registry.docker-cn.com/library/centos latest 75835a67d134 8 weeks ago 200MB
##docker run <选项><镜像名称或者id><命令><参数>
## --name 自定义容器名称
## -t 分配一个伪终端
## -i 交互式操作
docker run -it --name myCentOS IMAGE ID /bin/bash
##此时进入到docker内的centOS
##可以看到用户名已经有改变
##[root@localhost /]# docker run -it --name myCentOS IMAGE ID /bin/bash
##[root@e09b83c89159 /]#
##查看docker内的centOS版本信息
cat /etc/redhat-release
##[root@e09b83c89159 /]# cat /etc/redhat-release
##CentOS Linux release 7.5.1804 (Core)
##启动成功
##如果想退出docker内的CentOS交互式操作,输入
exit
##注意,此时容器仍然存在,可以使用docker ps命令查看
## -a 表示查看所有容器,包括运行和未运行状态
docker ps -a
##查看容器信息
docker ps -a
##CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
##e09b83c89159 75835 "/bin/bash" 5 minutes ago Exited (0) 13 seconds ago myCentOS
##此时发现容器STATUS为已经停止,首先启动容器
docker start <CONTAINER ID>
##然后进入Centos
##exec用于从外部运行容器内部的命令
docker exec -it <CONTAINER ID> /bin/bash
##此时再次进入到了myCentOS
##删除容器之前,请确保容器已经关闭
##查看当前正在运行的容器
docker ps
##CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
##e09b83c89159 75835 "/bin/bash" 16 minutes ago Up 6 minutes myCentOS
##此时发现容器STATUS为正在运行,首先停止容器
docker stop <CONTAINER ID或者NAMES>
##容器已停止,删除容器
##rm 删除容器命令
##-f 强制停止容器后删除,使用SIGKILL信号
docker rm <CONTAINER ID或者NAMES>
##删除所有容器
docker rm $(docker ps -aq)
##删除镜像前,请确保由此镜像创建的容器已经正确删除
##查看镜像
docker images
##删除镜像
##docker rmi <注册名称>/<镜像名称,id>:<标签>
##不指定标签,则默认删除latest标签
##-f 强制删除镜像
docker rmi <IMAGE ID>
##删除所有镜像
docker rm $(docker images -aq)
Dockerfile 是一个文本文件,其包含了一条条的指令(Instruction),每一条指令构建一层。
Dockerfile 支持 Shell 类的行尾添加 \
的命令换行方式,以及行首 #
进行注释的格式。
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而FROM就是指定基础镜像,因此一个Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
用于执行命令行命令,格式有两种
shell格式:RUN <命令>
exec格式:RUN [“可执行文件”, “参数1”, “参数2”],这更像是函数调用中的格式。
docker build <选项>
Dockerfile 路径可以使是本地路径,也可以是URL路径。若设置为 - ,则从标准输入获取Dockerfile的内容
--force-rm=false
创建镜像失败时,删除临时容器
--no-cache=false
不使用之前构建中创建的缓存。
-q、--quiet=false
不显示Dockerfile的RUN运行的输出结果
--rm=true
创建镜像成功时,删除临时容器
-t、--tag=""
设置注册名称、镜像名称、标签。格式为 <注册名称>/<镜像名称>:<标签>(标签默认为latest)
##cd到Dockerfile文件所在目录下,执行
docker build -t <REPOSITORY>:TAG .
其中REPOSITORY,为自定义镜像REPOSITORY,TAG为自定义标签(版本)
后面还有一个 .
表示当前目录, 而Dockerfile
就在当前目录,这个目录称为构建上下文
首先我们要理解
docker build
的工作原理。Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API,而如docker
命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种docker
功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举。当我们进行镜像构建的时候,并非所有定制都会通过RUN指令完成,经常会需要将一些本地文件复制进镜像,比如通过COPY指令、ADD 指令等。而
docker build
命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。那么在这种客户端/服务端的架构中,如何才能让服务端获得本地文件呢?这就引入了上下文的概念。当构建的时候,用户会指定构建镜像上下文的路径,
docker build
命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。
一般来说,应该将Dockerfile放置在一个空目录下,或者项目的根目录下。如果该目录没有需要上传的文件,则需要将需要的文件复制过来;如果有些文件不需要在构建的时候上传Docker引擎,那么可以用类似.gitignore
文件的语法写一个.dockerignore
,忽略不需要的文件。
一般习惯,会使用Dockerfile
作为文件名,并放置在基于构建的上下文目录中;
其实Dockerfile的文件名不是必须要为Dockerfile
,也不是必须要位于上下文目录中,可以用-f
指定某个文件作为Dockerfile;
至此,学习docker的旅途才算刚刚迈出了第一步,积跬步,至千里。只有坚持,才能走得稳,行的远;下一篇将介绍更多关于Dockerfile的使用的详细内容,欢迎关注!
转载请注明出处:https://blog.csdn.net/zouguo1211/article/details/84859827