docker学习

本文详细介绍了Docker的常用命令,包括查看容器状态、启动和重启容器、进入容器、停止和删除容器、导出与导入容器、管理镜像如查看镜像列表、下载新镜像、删除镜像等。此外,还讲解了如何通过Dockerfile构建镜像以及授权操作。
摘要由CSDN通过智能技术生成

docker常用命令

容器操作命令

查看容器状态

查看正在运行的容器

docker ps -a

在这里插入图片描述
第一列容器id,停止容器会用到
第二列IMAGE是这个容器所使用的镜像
第三列COMMAND是这个容器启动时附带的命令
第四列CREATED是代表这个容器什么时候创建的
第五列代表这个容器的状态,up就是运行,Exited退出
第六列PORTS代表这个容器使用的网络端口,一般web服务器会用到,上面几个例子中都没用到端口

启动容器

docker run ubuntu:latest /bin/echo "hello world"

run的意思是使用ubuntu的latest版本镜像创建一个新容器,然后运行/bin/echo这个程序,打印hello world
在这里插入图片描述
当然也可以直接执行docker run ubuntu:latest就会什么也不做自动退出

docker run -itd --name ubuntuTest ubuntu:latest /bin/bash

也可以写成

docker run -i -t -d --name ubuntuTest ubuntu:latest /bin/bash

-i:交互式操作,因为我们启动容器后运行了/bin/bash所以需要交互
-t: 显示一个终端,如果启动了/bin/bash,但是没有用-t参数,输出将会不可见,就会是下面这个效果
-d: 将容器后台运行,如果不指定-d,则当前终端退出,docker容器就会自动退出
–name: 指定当前容器的名字,也可以不写,主要在一个镜像版本启动了多个的时候可能需要指定吧

没有使用-t的效果
在这里插入图片描述

启动已经停止的容器

docker start b750bbbcfd88 

b750bbbcfd88是容器ID,用docker ps -a命令可以看到

docker start和run的区别,run会使用镜像创建一个新容器,start会用之前创建的容器来运行。
举个例子,现在要用docker启动一个web服务器实例,指定了端口8080,如果现在需要使用这个镜像启动另一个web服务器实例,不能指定端口8080了,所以就需要使用docker run命令。重新指定一个端口号来启动。

重启正在运行的容器

重启一个正在运行的容器,可能这个容器发生了内存溢出,或者cpu满了

docker restart <容器 ID>

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入

docker attach b750bbbcfd88
或者
docker exec b750bbbcfd88

b750bbbcfd88是容器ID,用docker ps -a命令可以看到
exec和attach的区别就是,使用attach进入容器退出后,容器会停止运行,exec不会停止运行

停止容器

docker stop b750bbbcfd88

b750bbbcfd88是容器ID,用docker ps -a命令可以看到

容器导出

docker export 1e560fca3906 > ubuntu.tar

上面的命令会将容器快照导入ununtu.tar文件中

容器导入

从导出的快照文件中导入

cat ubuntu.tar | docker import - ubuntu:v1

从网络中导入

docker import http://example.com/exampleimage.tgz example/imagerepo

容器删除

删除单个容器

docker rm -f 1e560fca3906

删除所有处于终止状态的容器

docker container prune

容器内状态查看

查看容器标准输入输出日志

docker logs 1e560fca3906

查看容器内运行的进程

docker top 1e560fca3906

查看容器配置信息

docker inspect 1e560fca3906

容器重命名

docker rm name1 name2

镜像操作命令

images查看本机镜像列表

docker images

pull从远程镜像仓库中下载一个新的镜像到本地

docker pull ubuntu:13.10

search搜索镜像

docker search httpd

rmi删除镜像

docker rmi httpd

更新镜像

当我们的镜像版本比较老时,可以进行更新
首先使用镜像创建一个容器,并启动一个命令行

docker run -t -i webapp:v1 /bin/bash

如果镜像中包含了node服务
可以使用npm install 进行更新。
更新完成之后在命令行中使用exit停止容器

然后使用commit来提交容器副本,-m是本次更新的描述信息,-a是author的意思。e218edb10161是刚才停止的那个容器ID,webapp:v2是新的镜像名称

docker commit -m="更新了node.js版本" -a="bugggget" e218edb10161 webapp:v2

构建镜像

构建镜像需要创建一个Dockerfile文件,然后在这个文件中指定镜像中需要包含的内容。
如果我们需要构建一个镜像,包含Nginx,redis
可以在Dockerfile中写入如下内容

FROM nginx
LABEL image.authors="bugggget"

ENV BUILD_DESC 镜像开始构建,这是一个本地构建的nginx镜像
ENV RUN_DESC 容器启动

RUN echo $BUILD_DESC > /usr/share/nginx/html/index.html \
&& RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz

COPY ./ /usr/tom/tmp

VOLUME ["/mnt","/user/test"]

CMD echo $RUN_DESC 

ENTRYPOINT ["nginx", "-c", "/etc/nginx/nginx.conf"]

注意/usr/share/nginx/html/index.html是在容器内的路径,不是当前主机上的路径,一般不要去修改他
FROM:docker镜像是分层的,FROM是这个镜像的基础镜像

LABEL:添加镜像的一些描述信息

ENV:定义的环境变量,Dockerfile和容器运行时都可以使用$来引用这个变量

RUN:只有在build时才会运行,每次运行RUN命令的时候都会新增一层镜像。所以为了减少分层次数,上面使用了&&符号来连接

COPY:将相对当前Dockerfile上下文的文件复制到容器中对应的目录下,如果对应的目录不存在则会创建。这里是把本机上当前目录下所有文件都复制到了容器中的/usr/tom/tmp目录下(copy注意了,src尽量写当前路径,desc应该是绝对路径)

VOLUME:设置文件挂载点,也就是将当前主机中的/mnt目录和容器中/user/test这个目录关联起来,后续/user/test中的任何变动都会同步到主机的/mnt目录下。可以用于日志文件保存,防止容器关闭导致日志文件流失。也可以在运行时使用-v来指定挂载点 -v /mnt:/usr/test

CMD:每次容器启动时都会执行的命令或者脚本,如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。如果命令带了参数,可以通过在docker run时修改cmd的参数

ENTRYPOINT:功能和CMD类似,但是参数不可变

RUN和CMD,ENTRYPOINT的区别
RUN表示在构建过程中执行的命令,如果RUN命令失败,那么镜像就会创建失败。所以一定不要在RUN中写程序启动的命令

CMD和ENTRYPOINT表示在运行过程中执行的命令,在build过程中不会被执行

Dockerfile文件编写完成之后,执行build命令

docker build -t nginxtest:v1 .

nginxtest:v1是镜像的名称和版本
.是构建时需要打包的路径,相当于构建上下文。这行命令会把当前目录下的所有文件都打包到镜像中。所以镜像中不要放没有用的文件

docker授权命令

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a $USER docker     #将登陆用户加入到docker用户组中
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值