docker笔记

什么是docker

Docker 属于 Linux 容器(三大特色:启动快、资源占用少、体积小)的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。 Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行同样。有了 Docker,就不用担忧环境问题。 整体来讲,Docker 的接口至关简单,用户能够方便地建立和使用容器,把本身的应用放入容器。容器还能够进行版本管理、复制、分享、修改,就像管理普通的代码同样python

 

docker用途

docker主要用途,目前分为三大类:linux

一、提供一次性的环境。好比,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。git

二、提供弹性的云服务。由于 Docker 容器能够随开随关,很适合动态扩容和缩容。github

三、组建微服务架构。经过多个容器,一台机器能够跑多个服务,所以在本机就能够模拟出微服务架构。web

 

docker安装

mac下:https://download.docker.com/mac/stable/Docker.dmg 下载安装便可 安装完后运行,终端能够经过docker info看是否安装成功正则表达式

linux下:yum install -y docker-engineredis

运行 docker info 查看是否安装成功docker

 

docker经常使用命令

镜像类shell

  • docker build --rm=true . 构建镜像
  • docker pull ${IMAGE} 安装镜像
  • docker images 显示已经安装的镜像
  • docker images --no-trunc 显示已经安装镜像的详细内容
  • docker rmi ${IMAGE_ID} 删除指定镜像
  • docker rmi $(docker images | grep "^" | awk "{print $3}") 删除全部没有标签的镜像
  • docker rm $(docker ps -aq) 删除全部的镜像
  • docker rmi $(docker images --quiet --filter "dangling=true") 删除未使用的镜像

容器类flask

  • docker run 运行容器
  • docker ps 显示正在运行的容器
  • docker ps -a 显示全部的容器
  • docker stop ${CID} 中止指定容器
  • docker stop docker ps -q 中止全部正在运行的容器
  • docker ps -a --filter "exited=1" 显示全部退出状态为1的容器
  • docker rm ${CID} 删除指定容器
  • docker ps -a | grep wildfly | awk '{print $1}' | xargs docker rm -f 使用正则表达式删除容器
  • docker rm -f $(docker ps -a | grep Exit | awk '{ print $1 }') 删除全部退出的容器
  • docker rm $(docker ps -aq) 删除全部的容器
  • docker inspect --format '{{ .NetworkSettings.IPAddress }}' ${CID} 显示指定容器的IP
  • docker attach ${CID} 进入容器
  • docker exec -it ${CID} bash 进入容器打开一个shell
  • docker ps | grep wildfly | awk '{print $1}' 经过正则表达式查找容器的镜像ID  

其中attach进入容器,退出后容器也会退出,而exec只是退出当前shell,容器不会退出。

 

docker-compose

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,一般由多个容器组成。使用Docker Compose再也不须要使用shell脚原本启动容器。 
Compose 经过一个配置文件来管理多个Docker容器,在配置文件中,全部的容器经过services来定义,而后使用docker-compose脚原本启动,中止和重启应用,和应用中的服务以及全部依赖服务的容器,很是适合组合使用多个容器进行开发的场景。

安装:

sudo pip install docker-compose

主要配置两个文件Dockerfile和docker-compose.yml。dockerfile 用来定义容器, docker-compose.yml 用于把多个容器链接到一块儿同时运行。

简单案例:使用docker-compose构建一个flask web应用

首先新建一个web目录,建立app.py文件,内容以下:

from flask import Flask
from redis import Redis app = Flask(__name__) redis = Redis(host="redis",port=6379) @app.route("/") def hello(): count = redis.incr('hits') return 'hello world! {}'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0",debug=True)

编写Dockerfile文件

FROM python:3.6-alpine
ADD . /code WORKDIR /code RUN pip install redis flask CMD ["python","app.py"]

容器构建完毕,如何链接这些容器,由docker-compose.yml文件定义

version: '2‘
services:
    web:
        build: .
        ports:
            - "6379:6379"
    redis:
        images: "redis:alpine"

至此配置文件已写好,而后执行

docker-compose build #构建
docker-compose up -d #后台运行服务

docker-compose搭建服务真的很方便,搭建其余服务能够参照上述配置,仿造着写就熟悉了。好比https://github.com/vulhub/vulhub 这个docker漏洞靶场环境,能够参考和理解里面的配置文件,不懂的参数多谷歌百度,摸索几回就会用了。

相关文章
相关标签/搜索