0%

Docker 基本操作-镜像

上一篇我们测试了怎么运行容器,下面则看看镜像 我们run一个镜像时,如果该镜像本地没有的话,一般默认是去Docker Hub上下载,因此我可以列出本机上镜像

sudo docker images

正如之前描述仓库概念时所说,每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像,因此可以指定特定镜像(带tag);不指定tag,默认是下载最新版的镜像

sudo docker run -t -i --name test ubuntu:16.04 /bin/bash

如果不想启动镜像,只想下载,那么可以用pull命令

sudo docker pull ubuntu:14.04

如果想去Docker Hub上搜索镜像,则用search命令

sudo docker search python

用Dockerfile构建镜像,新建一个Dockerfile文件,FROM基础镜像,MAINTAINER设定维护者,ENV设置环境变量(这里是时间可以用于重置缓存),ADD拷贝文件,RUN执行指令,EXPOSE设置映射端口,CMD用于指定容器启动时要运行的命令(但是会被docker run命令行中参数所覆盖,这次例子是用于启动Rstudio-server),PS.自己写一遍Dockerfile,对于镜像差不多会有基础认识了

# Version: 0.0.1
FROM ubuntu:18.04
MAINTAINER anlan "gukai1212@163.com"

ENV REFRESHED_AT 2019-08-31

ADD profile /etc/profile

RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && \
  echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list && \
  echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
  echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
  echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates gnupg

RUN set -e \
    && echo "deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/" >> /etc/apt/sources.list \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9

RUN apt-get -y update \
    && apt-get -y upgrade \
    && apt-get install -y --no-install-recommends r-base \
    && apt-get install -y --no-install-recommends r-base-dev

RUN apt-get install -y --no-install-recommends gdebi-core
RUN apt-get install -y --no-install-recommends wget psmisc libapparmor1 libedit2 sudo lsb-release libclang-dev
RUN wget https://download2.rstudio.org/server/bionic/amd64/rstudio-server-1.2.1335-amd64.deb
RUN dpkg -i rstudio-server-1.2.1335-amd64.deb && rm rstudio-server-1.2.1335-amd64.deb

EXPOSE 8787

RUN set -e \
    && useradd -m -d /home/rstudio rstudio \
    && echo rstudio:rstudio \
      | chpasswd

CMD ["/usr/lib/rstudio-server/bin/rserver", "--server-daemonize=0", "--server-app-armor-enabled=0"]

然后用build命令来返回一个新镜像r_rstudio,我在Docker Hub上的镜像仓库gukai1212

sudo docker build -t gukai1212/r_rstudio ./
sudo docker images

接着用新镜像启动容器,并将容器的8787端口绑定到主机8787上

sudo docker run -d -p 8787:8787 -i -t --name test gukai1212/r_rstudio

除了上述例子用到的指令外,还有以下几点等等(所有命令可参照https://docs.docker.com/engine/reference/builder/):

  • ENTRYPOINT,跟CMD类似,但不会被run命令行参数所覆盖,而且还能接受参数传递给ENTRYPOINT中的命令
  • WORKDIR,设置工作目录,ENTRYPOINTCMD的指令会在这个目录下执行,但可以被run命令的-w参数所指定的目录所覆盖
  • USER,指定执行用户
  • LABEL,添加元数据

删除镜像/删除所有镜像

sudo docker rmi test
# sudo docker image rm test   #也可用于删除镜像
sudo docker rmi `docker images -a -q`

然后可将镜像推送到Docker Hub上

sudo docker push gukai1212/r_rstudio

最后还可以搭建一个Docker Registry来代替docker Hub上的公有仓库

先将registry镜像pull下来

sudo docker pull registry:2

再运行Docker Registry

sudo docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:2

给本地的一个镜像打上标记,然后在推送到Registry

sudo docker tag hello-world localhost:5000/hello-word:v1.0
sudo docker push localhost:5000/hello-word:v1.0

看下Registry仓库里有哪些镜像

curl http://localhost:5000/v2/_catalog

最后这些镜像可使用docker run来构建新容器

sudo docker run -t -i localhost:5000/hello-word:v1.0
sudo docker ps -a

参考资料:
https://github.com/yubozhao/docker-rstudio-server
《第一本Docker书》

本文出自于http://www.bioinfo-scrounger.com转载请注明出处