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