Docker简介
Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制[1]。Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免引导一个虚拟机造成的额外负担[2]。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、内存、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd – nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。
下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
图 1.4.1.1 – 传统虚拟化 图 1.4.1.2 – Docker
从docker-compose.yml启动镜像
docker-compose up -d
从Dockerfile编译镜像
docker build -t lnmp:v1 .
FROM node:9 as installer COPY . /juice-shop WORKDIR /juice-shop RUN npm install --production --unsafe-perm FROM node:9-alpine ARG BUILD_DATE ARG VCS_REF LABEL maintainer="Bjoern Kimminich <bjoern.kimminich@owasp.org>" \ org.label-schema.name="OWASP Juice Shop" \ org.label-schema.description="An intentionally insecure JavaScript Web Application" \ org.label-schema.vendor="Open Web Application Security Project" \ org.label-schema.url="http://owasp-juice.shop" \ org.label-schema.usage="http://help.owasp-juice.shop" \ org.label-schema.license="MIT" \ org.label-schema.version="7.0.0" \ org.label-schema.docker.cmd="docker run --rm -p 3000:3000 bkimminich/juice-shop" \ org.label-schema.docker.params="NODE_ENV=string name of the custom configuration,CTF_KEY=string key to hash challenges into CTF flag codes" \ org.label-schema.vcs-url="https://github.com/bkimminich/juice-shop.git" \ org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.build-date=$BUILD_DATE \ org.label-schema.schema-version="1.0.0-rc1" WORKDIR /juice-shop COPY --from=installer /juice-shop . # 定义匿名数据卷,运行时可用 -v 指定一个命名的数据卷 VOLUME ["/juice-shop/data"] # 声明暴露的端口 EXPOSE 8888 CMD ["npm", "start"]
运行镜像并挂载mysqls数据卷
docker run -d -v my_data:/var/lib/mysql
运行镜像,映射端口并绑定Host目录到容器
docker run -p 8888:8888 –mount type=bind,src=/Users/allen/Workshop/www/hema/data,target=/juice-shop/data hema:v1.1
列出镜像
docker image ls
列出容器
docker container ls
查看进程
docker ps
停止容器
docker stop containerxxxx
列出和查看挂载的数据卷
docker volume ls
docker volume inspect volumexxxxxx
进入容器进行执行shell
docker exec -it containerxxxx bash
复制容器中的目录
docker cp containerxxxxxx:/etc/opt/remi/php72/php.d conf/php/php.d