上一篇我们测试了怎么运行容器,下面则看看镜像 我们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
,设置工作目录,ENTRYPOINT
和CMD
的指令会在这个目录下执行,但可以被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转载请注明出处