docker学习笔记

(点击查看大图)

参考:https://github.com/yeasy/docker_practice/blob/master/SUMMARY.md

http://n4tsu.top/2019/06/04/Docker%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#more

安装docker

1、更新apt

1
sudo apt-get update

2、安装docker

1
sudo apt-get install docker-ce

3、查看docker是否安装成功

1
docker -v

若显示“Docker version xx.xx.x-ce, build afdb6d4” 安装成功

4、更新docker源为国内源

1
vi /etc/docker/daemon.json

加上以下代码

1
2
3
4
5
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}

Docker的使用

开启docker服务

1
sudo service docker start

停止重启服务

1
2
sudo service docker stop
sudo service docker restart

拉取镜像

1
docker pull [image]

查看当前镜像。

1
docker images

新建一个docker容器,并映射端口号

1
docker run -d -p [host port]:[docker port] [image]

查看运行中的docker容器

1
docker ps

进入一个docker容器。

1
docker exec -it [container id] bash

拷贝本地文件到docker。

1
docker cp [本地路径] [container id]:[container 路径]

启动/停止docker容器

1
2
docker stop [container id]
docker start [container id]

删除docker容器

1
docker rm [container id]

删除docker镜像

1
docker rmi [image id]

CTF题目搭建

先安装好了tutum/lamp镜像

直接使用该镜像开启容器

1
docker run -d -p 100:80 tutum/lamp

100表示本机端口,若有占用可自行更改

查看运行的容器,找到容器的ID

将ctf题目源码复制进容器中

1
docker cp HELLO.php 0d9b6ee67f88:/app

进入容器查看,复制成功

Dockerfile的使用

我们对一些固定的docker设置如何保存呢? 如何保存我们的一系列docker操作呢?由此便有了Dockerfile来构建镜像,便于更好保存我们的操作,dockerfile本质上是一个存储多行命令的文件。

利用Dockerfile构建镜像

在源码同目录下新建Dockerfile文件

编写Dockerfile文件

在该目录开启终端

1
docker build -t [镜像名] .
1
docker run -d -p  [host port]:[docker port] [容器名]

编写Dockerfile指令

FROM 基于哪个镜像的基础开发

1
FROM tutum/lamp:latest

RUN 容器构建时需要运行的命令

1
2
3
RUN rm -fr /app  \
&& mkdir /app \
&& mv /hello.php /app/hello.php

换行注意加\

EXPOSE 用于指定容器将要监听的端口

1
EXPOSE 80 3306

COPY 将主机的文件复制到镜像内,如果目的位置不存在,Docker会自动创建所有需要的目录结构 (注意:需要复制的目录一定要放在Dockerfile文件的同级目录下)

1
COPY ./[本地文件] /[docker路径]

ADD 同上类似

CMD 用于执行目标镜像中包含的软件和任何参数。CMD 几乎都是以CMD ["executable", "param1", "param2"...]的形式使用。因此,如果创建镜像的目的是为了部署某个服务(比如 Apache),你可能会执行类似于CMD ["apache2", "-DFOREGROUND"]形式的命令

1
CMD ["/run.sh"]

WORKDIR 指定创建容器后,终端默认登录进来的工作目录,一个落脚点

ENV 用来在构建镜像过程中设置环境变量

#注释