Docker常用命令、Docker数据卷、Dockerfile

1.容器命令:

========容器操作相关=========
docker run -d --name nginx01 -p 3344:80 nginx  // -d表示后台启动nginx,--name表示命名为nginx01,-p容器内部端口80映射到主机端口3344(这样通过3344就能够访问容器里面的nginx服务)

docker run -it -rm tomcat // (启动一个tomcat,-rm参数表示的是容器停止之后,容器数据以及镜像都会被自动全部删掉,不建议使用这种方式) 

docker exec -it 0ac6182e13eb /bin/bash 进入容器,查看容器的文件

docker cp 容器id:容器类路径 主机目的路径// 将容器中的数据拷贝到主机

docker ps // 查看正在运行的容器

docker ps -a // 查看过去运行过以及正在运行的容器(过去运行过的容器,会有单独的一份数据在)

docker rm -f 0ac6182e13eb // 强制删除某个容器,会连容器数据一起删掉

docker stop 0ac6182e13eb // 停掉正在运行的容器
docker kill 0ac6182e13eb // 强制停止容器

docker start 0ac6182e13eb // 启动已经停止的容器
docker restart 0ac6182e13eb // 重启容器

docker rm -f $(docker ps -aq) // 删除所有运行过的容器
docker rmi -f $(docker images -aq) // 删除所有镜像


==========容器信息查看相关========
docker stats 0ac6182e13eb// 查看容器占用的内存,cpu等信息

docker logs -tf --tail 10 0ac6182e13eb // 查看容器的日志,--tail 10表示只显示10条(去掉这个参数可以查看所有log), -tf 表示显示时间戳和显示最新的日志信息

docker top 0ac6182e13eb // 查看容器中的进程相关信息

docker inspect 0ac6182e13eb // 查看容器中的元数据,主要是一些配置信息、状态信息、以及镜像layer信息等



=========commit新的镜像=====
docker commit -m="提交信息" -a="作者" 容器id 容器镜像名:tag // 将更改后的容器打包成一个镜像。例如将自己的网站项目部署到Tomcat之后,可以直接打包成一个image,给别人使用,别人只需要启动容器就能访问你的网站。



======镜像相关======
docker rmi // 删除镜像
docker images // 查看主机上有哪些镜像

2. 容器数据卷:

数据卷挂载:用于保存容器中的数据到宿主机上,以及进行容器内和宿主机间的数据共享。
docker run -it -v 宿主机目录:容器内目录 ubuntu /bin/bash 

example 1:
docker run -it -v /home/test:/home/ ubuntu /bin/bash // 将容器中的/home目录挂载到宿主机的/home/test目录。 这样一来,容器和宿主机的该目录就进行了双向绑定。容器中/home目录下的内容变化,会反映到宿主机的/home/test上。反之,宿主机/home/test的变化也会反映到容器中的/home。

更改宿主机中挂载的内容会实时反映到容器中(即使容器处于running或者stoped状态),反之亦然。 

docker insept 容器id // 找到容器相关信息中的Mounts, 可以发现挂载的相关信息

example 2: 
docker run -p 3306:3306 -v /home/musql/conf/:/etc/mysql/conf.d -v /home/mysql/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

上面的例子启动Mysql,-v /home/musql/conf/:/etc/mysql/conf.d挂载出配置文件,-v /home/mysql/data/:/var/lib/mysql挂载出已经存储的数据, 并且通过-e设置mysql密码

可以使用多个-v 参数。

三种挂载:
1. 匿名挂载   -v 容器内路径
2. 具名挂载   -v 卷名:容器内路径
3. 指定路径挂载  -v /宿主机路径:容器内路径  (用的比较多)

具名挂载和匿名挂载都没有指定宿主机路径。在不指定的情况下,会被默认挂载到/var/lib/docker/volumes/xxxx/_data下。 具名挂载就是给被挂载的卷取个名字,匿名挂载就是随机生成的一串字符串。

examples:
docker run -d -P --name nginx02 -v /etc/ngin nginx // 匿名挂载

docker run -d -P --name nginx03 -v juming-nginx02:/etc/nginx nginx // 具名挂载,指定volume的名称为juming-nginx02

docker run -d -P --name nginx04 -v /home/test:/etc/nginx nginx // 指定路径挂载

docker volume ls // 查看当前存在的所有的volume情况,会显示卷的名称

具名挂载会有名称,匿名挂载就是一个字符串。指定路径挂载的卷通过docker volume ls是看不见的。

在这里插入图片描述

 docker volume inspect juming-nginx02 // 查看某个卷的信息

可以发现具名挂载默认被挂载到了/var/lib/docker/volumes/xxxx/_data这个目录下。如果是匿名挂载的话,也是默认挂载到这里。

在这里插入图片描述
容器与容器间数据共享(数据卷容器):

docker run -it --name docker02 --volumes-from docker01 ubuntu // 使用--volumes-from继承docker01的数据卷,这样一来docker02和docker01中的数据卷就可以进行数据共享。

其中ubuntu是使用Dockerfile自定义的镜像,使用了VOLUME参数指定了容器数据卷。比如说,VOLUME参数指定的值是test1, 那么再启动docker01和docker02的时候,在容器内部都会创建test1这个文件夹。同时,又由于再创建docker02的时候使用了--volumes-from参数,这样一来docker02和docker01就可以通过test1这个文件夹进行数据共享。

即使docker01被删除,docker02中还是存在test1这个目录,所以可以继续使用。

3. DockerFile常用指令

FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的, 姓名+邮箱
RUN # 镜像构建的时候需要运行的命令 ( 比如, apt-get install 安装一些软件)
ADD # 步骤,tomcat镜像,这个tomcat压缩包!添加内容 添加同目录, 支持解压缩,支持URL
WORKDIR # 镜像的工作目录 (镜像在被docker run的时候进去的初始目录)
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置。 指定改容器提供服务的端口号。比如EXPOSE 8080, 在启动容器的时候就可以使用-p 9000:8080来进行端口映射。从而可以使用该容器提供的服务
CMD # 指定这个容器启动的时候要运行的命令,当有多个的时候,只有最后一个会生效,docker run的时候可以指定命令将其替代。
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指
令。
COPY # 类似ADD,将我们文件拷贝到镜像中, 不会自动解压缩,不支持URL
ENV # 构建的时候设置环境变量!(可以用来设置JAVA_HOME等)

例子:

# 1.写dockerfile
Dockerfile文件默认的名字是Dockerfile,docker build的时候如果不使用-f 参数就会自动去寻找名字为Dockerfile文件进行build。

# 基于ubuntu镜像
FROM ubuntu 
#指定作者及邮箱
MAINTAINER dgq<1255826318@qq.com> 
# 设置一个环境变量, KEY value的形式
ENV MYPATH /usr/local
# 指定workdir, 就是容器启动的时候默认进入的目录(容器启动之后,使用pwd就会显示/usr/local)
WORKDIR $MYPATH 
RUN apt-get update
# 给镜像中安装vim, 注意增加-y,跳过软件安装过程中的询问,否则会报错
RUN apt-get install -y vim 
# 暴露80端口
EXPOSE 80
CMD echo $MYPATH
CMD echo "-----end----"
# 只有最后这个会生效,这条命令等价于 在启动容器的时候使用/bin/bash 参数(自动使用bash作为-it的参数)
CMD /bin/bash 

# 2. build镜像 
docker build -f myubuntu-dockerfile -t myubuntu:1.0 . // -f 指定dockerfile, -t 指定生成的image的名称, 注意最后的.

.是由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了。例如COPY指令就会从这个当前目录中找要copy的文件。

best practice: 建立一个空的文件夹,将Dockerfile以及要使用的文件都全部放在这个文件夹下面。然后进入这个文件夹执行docker build。避免不必要的错误。

# 启动
docker run -it myubuntu:1.0 // 这里就不需要指定/bin/bash了,因为Dockerfile里面CMD写了

容器启动之后默认进入WORKDIR:
在这里插入图片描述

docker history  镜像名// 查看容器构建的镜像的历史记录。可以看见镜像构建的步骤

在这里插入图片描述
CMD和ENTRYPOINT的区别:

使用CMD指定的命令,在docker run myubuntu:1.0 -l 启动容器的时候,后面可以通过 -cmd名称 的方式指定命令,这时候Dockerfile中CMD指定的命令会被后面指定的参数整体替换掉。

而ENTRYPOINT就不会被替换,而是在ENTRYPOINT命令的基础上追加。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值