docker 基本命令

docker 笔记(部分)

  • 查看docker的基本信息

docker version

docker info

docker image ls //查看镜像

docker image rm imageName//删除imageName

docker container run imageName //run imageName(如果image imageName不存在会去拉取)

docker container ls -a//查看所有container和其状态

docker container stop containerName or ID //stop container

docker container rm ID //删除container

docker container start ID//运行一个创建了但是停掉了的container

docker container ps -aq //列出所有container id

docker container stop $(docker container ps -aq) //停止所有的container

不能直接删除一个run 的container,但是可以-f 强制删除

容器的两种模式attached(前台) detached(后台)

docker image run -d -p 80:80 nginx //后台运行detach

docker attach id //detach -->attach

docker container logs id 查看detach的 id的 logs

docker container logs -f id// 动态跟踪

  • 交互:

docker exec -it ID sh(经常用)//进入一个正在运行的容器内部shell

docker container run -it containerName sh // 创建一个容器并且进入交互式模式

docker container top id

  • docker container run -d --p 80:80 --name 容器别名 nginx

上面命令执行的细节:

1.在本地查找是否有nginx这个image镜像,但是没有发现去远程的image registry查找nginx镜像(默认的registry是Docker Hub),而且下载最新版本的nginx镜像 (nginx:latest 默认)

2.基于nginx镜像来创建一个新的容器,并且准备运行

3.docker engine分配给这个容器一个虚拟IP地址

4.在宿主机上打开80端口并把容器的80端口转发到宿主机上

5.启动容器,运行指定的命令(这里是一个shell脚本去启动nginx)

  • image获取:

1.docker hub

docker image pull imageName:版本号//拉取image,版本号默认为lasted

docker image inspect imageId // 查看image详细信息.

docker image rm id(只有coantainer里面也rm 了才可以删除,stop也不行,或者强制删除)

2.离线导入导出

docker image save imagename -o filename//将image导出为一个文件

docker image load -i filename

3.dockerfile

docker image build -f dockerfilename -t imageName:tag .(.表示当前目录)

docekr image push userID/imageName:tag //push自己的image到docker hub.

docker image pull userID/imageName:tage//拉取user的版本为tag的image到本地.

  • docker commit

docker container commint containerID imageName:tag //将一个container 打包成一个image(用的少)

  • scratch

是一个空的镜像,什么都没有

dockerfile

镜像选择原则

官方镜像优于非官方的镜像,如果没有官方镜像,则尽量选择Dockerfile开源的

固定版本tag而不是每次都使用latest

尽量选择体积小的镜像

docker image build -f dockerFileNmae -t imageName .//将dockerFileName 构建为名字为imageName的镜像 .表示当前路径

  • FROM 选择基础镜像

  • RUN 主要用于在Image里执行指令,比如安装软件,下载文件等。尽量把语句写一个run里面

  • 文件复制和目录操作,COPY ADD

把本地的一个文件复制到镜像里,如果镜像没有目标文件,则会自动创建。比如把本地的 hello.py 复制到 /app 目录下。 /app这个镜像不存在,则会自动创建。

ADD和COPY区别就是复制的是一个gzip等压缩文件时,ADD会帮助我们自动去解压缩文件。需要自动解压缩的场合使用 ADD。

  • WORKDIR: 切换当前镜像的目录,如果不存在就创建目录
  • ENV ARG 环境变量

ENV 设置的变量可以在Image中保持,并在容器中的环境变量里

ARG 可以在镜像build的时候动态修改value, 通过 --build-arg

  • 容器启动命令CMD ENTRYPOINT:CMD可以用来设置容器启动时默认会执行的命令。

注意:如果docker container run启动容器时指定了其它命令,则CMD命令会被忽略并且如果定义了多个CMD,只有最后一个会被执行。但是ENTRYPOINT一定会执行**

  • DockerFile 技巧

1.合理使用缓存,把改变的尽量放到后面。

2.合理使用 .dockerignore

3.镜像的多阶段构建

4.尽量使用非root用户

docker的存储

Docker主要提供了两种方式做数据的持久化

  • Data Volume, 由Docker管理, 持久化数据的最好方式
  • Bind Mount,由用户指定存储的数据具体mount在系统什么位置

docker volume ls //查看volume DIRVER 和 VOLUMENAME

docker volume inspect VOLUMENAME //查看volume详细信息

dcoker volume prune //一次性删除所有volume

docekr container run -v localDir:containerDir imageName //把本地文件作为volume映射到容器。(如果两个不同的容器映射同一个本地的文件,在A容器里面修改volume对B容器可见)

Bind Mount

用户自己指定host机器的目录mount到container中。但是bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。所以bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 课程链接:https://www.imooc.com/video/15640 Linux安装docker命令 wg...
    三忌阅读 278评论 0 0
  • Docker 笔记来源:https://docs.docker.com/ 和 《docker 容器和容器云》 此笔...
    WunHwan阅读 444评论 0 2
  • 摘自《Docker 容器与容器云(第2版)》点击查看我的博客原文 1. 从容器到容器云 1.1 云计算平台 经典云...
    苏易北阅读 2,206评论 0 6
  • 1、Docker简介 开源的应用容器引擎 打包环境和应用到一个轻量级,可移植的容器中,发布到任何 Linux 机器...
    Assassin007阅读 298评论 0 0
  • docker概念 镜像与容器 docker镜像是一个统一文件系统,由一系列只读层堆叠而成。容器则是在只读层堆顶加上...
    羽色云烟阅读 786评论 0 0