docker学习笔记二 镜像和仓库的使用
一 镜像的基本操作
1 镜像基本命令
(1)拉取镜像
docker pull 镜像名 (:tag) 拉取镜像,如果在镜像名后加上:标签,就拉取指定标签的镜像
(2) 查找镜像
docker search 镜像名 查找docker hub上的公共镜像
2 容器基本命令
(1)启动容器命令
docker run -d -p 8080:80 --name 容器名 镜像 -d 守护式运行容器,-p 8080:80将宿主机8080端口映射到容器80端口
(2) 查看容器端口映射情况
docker ps -l 查看容易和宿主机端口映射情况
(3)查看容器端口和宿主机间的映射:
docker port 容器名 容器端口 // 存在端口映射就会返回映射到的主机端口号
3 dockerfile指令
(1)CMD
用于指定一个容器启动时要执行的指令。在docker run命令中指定的容器启动时的命令,会覆盖CMD指令。并且一个dockerfile中只能指定一条CMD指令。如果指定了多条,也只有最后一条会被使用
(2)ENTRYPOINT
和CMD命令类似,但是不同的是,docker run命令中指定的参数不会覆盖 ENTRYPOINT命令
(3)WORKDIR
用来创建镜像时,设置命令的执行路径
WORKDIR /opt/webapp/db #设置执行目录为 /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp #设置执行目录为 /opt/webapp
ENTRYPOINT [ "rackup" ]
(4) ENV
用来在镜像构建过程中设置环境变量
例:ENV RVM_PATH /home/rvm/ 这个设置的环境变量可以在后续的任何RUN指令中使用
ENV 设置的环境变量会被持久化到容器中。如果dockerfile中含有这条命令,在容器中输入env 就会输出RVM_PATH=/home/evm/
也可以使用docker run命令行的-e标志来传递环境变量,这些变量将只会在运行时有效
docker run -it -e "WEB_PORT=8080" test_env 然后输入env 可看到 WEB_PORT=8080
(5) USER
USER指令用来指定镜像会以什么什么用户无运行。
例如: USER nginx 会以nginx用户的身份来运行
(6)VOLUME
VOLUMN指令用来向基于镜像创建的容器添加卷。
例:VOLUMN ["/opt/project"] 这条指令会为基于此镜像的创建的容器创建一个名为/opt/project的挂载点
(7)ADD
ADD命令用来将构建环境的上下文和目录复制到镜像中
例:ADD software.lic /opt/application/software.lic 该命令会把构建目录下的software.lic文件复制到镜像的/opt/application/目录下。ADD命令指定的源文件还可以是文件的URL
(8)COPY
COPY命令非常类似于ADD,根本的不同是COPY只关心在构建上下文中复制文件,而不会去做解压,提取等工作。用法与ADD一样
(9)LABEL
label用来为docker镜像添加元数据,元数据以键值对的形式展现。
例: LABEL version="1.0" location="china" type="Data Center" 每一条指令中可以指定一个或多个元数据,元数据间用空格隔开
(10) STOPSIGNAL
设置停止容器时发送什么系统调用信号给容器。这个信号必须是内核系统调用表中合法的数
(11) ARG
用来定义可以在docker build明了运行时传递给构件运行时的变量。构建时使用--build-arg参数即可
例:dockerfile中有如下2条命令
ARG build
ARG webapp_user=user
第二条指令为 webapp_user=user指定了一个默认值,如果构建时没有为webapp_user指定值,就会使用默认值。docker build --build-arg build=1234 -t webapp_container . 使用该命令构建镜像时,build值为1234 webapp_user值为user
(12)ONBUILD
为镜像添加触发器。当一个镜像被用作其他镜像的基础镜像时,该镜像的触发器就会被执行。触发器会在构建过程中插入新指令。。我们可以认为这些指令是紧跟在FROM指令后面的。
例: ONBUILD ADD . /app/src
ONBUILD RUN cd /app/src && make
构建镜像时会先执行以上2条指令。
二 运行自己的Docker Registry
搭建自己的docker镜像仓库有种方式
1 从容器中运行 Registry
docker run -p 5000:5000 registry:2
该命令会启动一个运行Registry应用2.0版本的容器,并将5000端口绑定到宿主机。
注: 从docker1.3开始,需要在启动docker守护进程的命令中添加-insecure-registry localhost:5000命令,并 重启守护进程,才能使用本地registry。
接下来,尝试推送我们的镜像到本地仓库去。
先找个镜像打上标签:
docker tag test_env docker.example.com:5000/test_env/test_env_img
为了指定新的仓库目的地址,需要在镜像前面家加上主机名和端口前缀。在这条命令中。我们的仓库主机名 为docker.example.com
然后 推送镜像到本地仓库