docker命令

参考资源

常用命令

拉取镜像
javac

run

以安装jenkins为例。

docker run -u root  --rm   -d   -p 8080:8080   -p 50000:50000   -v jenkins-data:/var/jenkins_home   -v /var/run/docker.sock:/var/run/docker.sock   jenkinsci/blueocean 

– rm 容器停止时,会删除

-p 8080:80 将主机的8080端口,映射到,docker暴露的80端口上

-v 主机目录跟虚拟docker目录映射关系。 Docker Volume

-v /var/run/docker.sock:/var/run/docker.sock

上面通过sock文件的映射,达到与docker服务进程通信的目的。

-v jenkins-data:/var/jenkins_home

使用jenkins-data 来映射/var/jenkins_home目录,如果没有,会自动创建该卷。

–name demo 名字

–rm 临时使用,用完就删除容器。

Docker的数据持久化主要有两种方式: 1、bind mount 2、volume.

  • host机器的目录路径必须为全路径(准确的说需要以/~/开始的路径),不然docker会将其当做volume而不是volume处理

  • 如果host机器上的目录不存在,docker会自动创建该目录

  • 如果container中的目录不存在,docker会自动创建该目录

  • 如果container中的目录已经有内容,那么docker会使用host上的目录将其覆盖掉

–network 指定网络

相关可参考networkd

使用python的临时环境

使用docker非常方便建立临时的开发环境。如下命令,利用-v 将当前开发目录映射到 容器中,然后执行文件。

sudo docker run -it --rm -v ~/go:/go python:3.6 python /go/a.py

使用golang临时环境

直接编译~/go下面的a.go 文件。

sudo docker run -it --rm -v ~/go:/go golang go build a.go

构建镜像的策略

构建镜像,可以docker commit ,docker build 两种方式构建。前者,是相当于,保存运行中的容器,为镜像。

build的方式,需要有Dockerfile文件。推荐编写该文件的方式是:

  • 先启动一个镜像,运行bash命令占住镜像。

    docker run --name centos -itd  centos:7.9.2009 bash
    # 如果需要用到本地文件,  使用docker cp到容器内
    # 或为了加速下载,本地其一个简单的http服务
  • 进入容器,执行命令构建

    docker exec -it centos bash
    
    # 一步步执行命令构建
    
    # 当所有都操作妥当,然后保存一下操作历史
    history > /tmp/docker.his.txt
    # 拷贝出操作历史
    docker cp centos:/tmp/docker.his.txt .
    #然后挑选出合理的步骤,将命令放到RUN 后
    # 清理操作 见安装后清理操作
    
  • 善用多阶段构建。

    将经常使用到的基础镜像,先构建出来,然后在此镜像之上,构建。收集多阶段构建的Dockerfile到一起。

安装后清理操作

rm -rf intel-compute-runtime  # 删除安装使用到的临时文件
apt-get remove gnupg wget apt-transport    -https -y  # 删除安装的不必要的垃圾文件
apt-get clean autoclean -y   # 清理
apt-get autoremove -y   
rm -rf /var/lib/apt/lists/*   # 删除apt缓存到的文件