Docker
是使用 GoLang
开发的开源容器引擎,能够方便的打包开发好的应用,而后分发到任意 linux
主机上。mysql
与传统的虚拟机相比拥有如下优点:linux
因为不须要进行硬件虚拟和运行完整的操做系统等额外开销,不管是应用执行速度、内存损耗或者文件存储速度, Docker
都更加高效sql
Docker
容器应用直接运行与宿主内核,无需启动完整的操做系统,能够作到秒级启动docker
Docker
镜像提供了除内核外的完整运行环境,确保了应用运行环境的一致性json
能够经过 Docker
镜像来实现服务的持续交付、部署。使用 Dockerfile
来构建镜像,使用持续集成系统进行集成测试;使用镜像结合持续部署系统进行自动部署后端
只须要迁移镜像及镜像运行的数据就可在其余主机或平台运行bash
因为使用镜像进行部署,使维护更为容易。因为支持在镜像的基础上进行定制,使得扩展变得更简单。而官方也维护了一大批高质量的镜像,大大下降了镜像的制做成本wordpress
Docker
提供了仓库(Repository
)用于存放制做好的镜像,方便使用者获取,在本地可通知配置多个 Repository
。测试
可使用命令来拉取镜像:ui
docker pull [repo url>/]image name>
默认的 repo url
是 hub.docker.com
,拉取默认仓库中的镜像时是不须要 url
的。
如拉取 debian
: docker pull debian
。
咱们也可将本身制做好的镜像推送到仓库,以便分发,使用命令:
docker push [<repo url>/]<image name>[:<image tag>>
使用 docker search
命令则可搜索默认 repo url
内的镜像。
镜像加速
因为默认 repo url
在国外,为了加快拉取速度,须要指定其为国内的,向 /etc/docker/daemon.json
中添加:
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
即可使用 Docker
在中国的镜像加速站。
对于企业用户还可搭建本身的私有镜像仓库,方便管理内部镜像。
镜像是通过 Dockerfile
规则打包生成的, Dockerfile
文件了指明了镜像的生成及运行方式。
这里简单介绍下 Dockerfile
中经常使用的命令:
指明基于那个镜像,一般是一个系统环境,如 debian
。在多阶段(stage
)构建中可以使用 FROM ... AS ...
来命令阶段,供后面的阶段使用
设置镜像的环境变量
导出端口,语法: EXPOSE port/protocol
执行一条命令
复制镜像内部的文件,也可从指定 stage
中复制文件,使用 --from=<stage name>
来实现
复制本地文件到镜像中,并作了一些额外工做,如自动解压文件、保持文件属性等
切换工做目录
CMD
执行命令,极容易在 docker run
时被覆盖。主要用于指定镜像的默认启动命令,有如下三种语法:
CMD ["executable", "param1", "param2"]
Exec
模式,首先CMD ["param1", "param2"]
设置 ENTRYPOINT
的默认参数CMD command param1 param2
Shell
模式指定镜像默认的运行命令,可使用 --entrypoint
参数在 docker run
时覆盖 Dockerfile
内的 ENTRYPOINT
有 Exec
和 Shell
两种模式
一般使用这个命令来指定镜像的启动命令,由于 CMD
稍不注意就被覆盖了
更多关于 Dockerfile
内容请参见: Dockerfile reference
这里给出一个简单的 Dockerfile=, 是 =debian sid
的:
FROM scratch ADD rootfs.tar.xz / CMD ["bash"]
使用 docker build -f <Dockerfile path> [-t <image name>[:<tag>]] .
建立镜像和标记 Tag
Tag
可用来标记不一样的镜像版本,就像版本号。
使用 docker image ls
能够列出下载下来的镜像
使用 docker run
命令运行镜像,可以使用参数配置,下面给出一个例子:
docker run -it -d -p <local port>:<container port> -v <local path>:<container path> <image>
-i
是交互式操做-t
是终端-p
指定端口映射-v
指定 volume
映射-d
后台模式使用 docker image rm <image id>
删除镜像
docker save <image id> > <image save>.tar
docker load < <image save>.tar
容器是镜像运行后的实体,运行与属于本身的独立的命名空间。
使用 docker run
命令启动镜像就能够建立一个容器
使用 docker ps
可列出正在运行的容器,加上 -a
参数可列出因此存在的容器
使用 docker container start <containe id>
启动容器
使用 docker container stop <containe id>
终止容器
dcoker container pause <containe id>
dcoker container restart <containe id>
dcoker container logs <containe id>
docker container rm <container id>
命令可删除容器
使用 docker exec -it <container id> /bin/sh
命令可进入容器的执行环境
docker import <container export>.tar <container name>
docker export <container id> > <container export>.tar
直接运行镜像不便于部署服务,于是官方推出了 Docker Compose
来负责应用部署。
使用 docker-compose.yml
文件将应用须要的镜像都定义在一块儿,而后使用 docker-compose
命令来部署。
docker-compose.yml
的语法详见: Compose file version 3 reference,这里给出一份部署 wordpress
的文件:
version: "3.7" services: wordpress: image: wordpress ports: - "8080:80" networks: - backend mysql: image: mysql volumes: - db-data:/var/lib/mysql/data networks: - backend volumes: db-data: networks: backend:
启动服务,加上 -d
表示在后端运行
终止服务
构建服务中的容器
验证文件格式是否有误
进入指定的容器,如进入上面 wordpress
中的 mysql
则是: docker-compose exec mysql
显示日志,可指定容器
重启服务
更多命令请见: Overview of docker-compose CLI