DevOps第一步 -- 使用Docker

Posted by CaiJiahe on November 2, 2017

0x01 Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

0x02 Dockerfile

FROM <image name>:基于哪个Docker镜像来构建新镜像。
MAINTAINER <author name>:作者和联系方式。
RUN <command>:在Docker中执行一个bash或者exec。
ADD <src> <dest>:复制文件指令。dest是容器内的路径,src可以是URL或者是启动配置上下文中的一个文件。(不支持zip,支持tar)
COPY <src> <dest>:和ADD类似,但是如果src是归档文件,则不会解压。
CMD [“executable”, “param1”, “param2”]:真正执行命令,docker run后面的参数将覆盖前面命令后面的参数。多条只有最后一条会生效。
ENTRYPOINT [“executable”, “param1”, “param2”]:真正执行命令,docker run后面的参数将追加到命令后面。多条只有最后一条会生效。
WORKDIR </path/to/workdir>:指定CMD、ENTRYPOINT、RUN命令的工作目录。
EXPOSE <port1> <port2>:指定容器在运行时监听的端口。
ENV <key> <value>:指定环境变量。
VOLUME [“/data”]:授权从容器到主机访问的目录。
ARG xxx:声明一个参数。

0x03 Docker常用命令

  • docker search docker-image 搜索docker镜像。
  • docker pull docker-image 下载docker镜像。
  • docker build –tag xxx:tag dir 构建镜像。
  • docker run –name xxx docker-image 指定容器的名字。
  • docker run -d docker-image 后台运行根据镜像运行一个容器。
  • docker run -p hostip:hostport:containerport docker-image 端口映射。
  • docker ps 查看当前所有运行的docker容器。
  • docker ps -a 查看所有运行过的docker容器。
  • docker kill xx 杀掉当前运行的docker容器。
  • docker rmi imageid 删除镜像。
  • docker rm containerid 删除容器。
  • docker start xxx 启动容器。
  • docker restart xxx 重启容器。
  • docker stop xxx 停止容器。
  • docker logs 查看容器日志。
  • docker run –interactive –tty docker-image 创建带有交互式的容器。
  • docker-machine ip default 查看当前docker的默认ip。

0x04 fgs-env的Dockerfile

	FROM centos
	MAINTAINER caijiahe <caijiahe@ledo.com>

	COPY cmake-3.10.0-rc4/ /export/cmake
	COPY jsoncpp/ /export/jsoncpp/
	COPY rabbitmq-c/ /export/rabbitmq-c/

	RUN yum install make -y
	RUN yum install gcc-c++ -y
	RUN yum install openssl-devel -y

	WORKDIR /export/cmake
	RUN ./configure
	RUN make
	ENV PATH /export/cmake/bin:$PATH

	WORKDIR /export/jsoncpp
	RUN cmake -G "Unix Makefiles"
	RUN make
	RUN make install

	WORKDIR /export/rabbitmq-c
	RUN cmake .
	RUN cmake --build .
	RUN make
	RUN make install
	RUN echo "/usr/local/lib64" >> /etc/ld.so.conf
	RUN ldconfig

0x05 docker push时候遇到的问题

问题:
Error response from daemon: Get https://ip:port/v1/_ping: http: server gave HTTP response to HTTPS client.

解决办法:

  • 在docker宿主机(Windows上docker的宿主机是VirtualBox)上创建文件 /etc/docker/daemon.json

      [root@localhost ~]# echo '{ "insecure-registries":    ["ip:port"] }' > /etc/docker/daemon.json
    
  • 重载docker

      [root@localhost ~]# systemctl restart docker
    

0x06 扩展阅读

windows上映射端口无法访问的问题