Docker基础(2) 实践篇mysql
Docker指令的操做对象主要针对四个方面:linux
具体信息能够经过在终端输入docker能够查看,使用docker COMMAND --help还能够进一步查看某条指令的使用方式。
接下来学习一些经常使用的基本指令。sql
查看Docker版本信息:docker
$ docker version
Client: Version: 18.09.7 API version: 1.39 Go version: go1.10.4 Git commit: 2d0083d Built: Fri Aug 16 14:19:38 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.09.7 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 2d0083d Built: Thu Aug 15 15:12:41 2019 OS/Arch: linux/amd64 Experimental: false
查看设备信息,好比服务器版本、存储驱动程序、内核版本、操做系统、总内存等:shell
$ docker info
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 14 Server Version: 18.09.7 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs ...
Docker hub是Docker的公有仓库,通常须要的镜像均可以从这里下载。用户还也能够上传自制的镜像。json
查找镜像,下面这条命令将搜索与centos相关的镜像:centos
$ docker search centos
下载镜像,冒号能够指定版本号,若是省略,默认下载最新版本,至关于:latestapi
$ docker pull imageA:1.0
上传镜像,前提要注册Docker Hub帐号,并使用docker login登陆bash
$ docker pull imageA:1.1
查看全部本地镜像服务器
$ docker images
或者
$ docker image ls
每一个镜像都有一个惟一的ImageID,全长128位,默认只显示12位缩写,加上-a还能够看到build命令生成的中间镜像。
Docker镜像具备分层的结构,使用docker history能够查询一个镜像分了多少层,以及每一层所做的变动
$ docker history dockerapitestimage:latest
IMAGE CREATED CREATED BY SIZE COMMENT 0112b74edea7 2 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["dotnet" "Web… 0B 5185fbd03612 2 weeks ago /bin/sh -c #(nop) COPY dir:9a2de08b90587d600… 294kB d2f4b4e061f1 2 weeks ago /bin/sh -c #(nop) EXPOSE 5000 0B ca882651894c 2 weeks ago /bin/sh -c #(nop) WORKDIR /app 0B e28362768eed 3 weeks ago /bin/sh -c aspnetcore_version=3.1.1 && c… 17.8MB <missing> 3 weeks ago /bin/sh -c dotnet_version=3.1.1 && curl … 76.7MB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get ins… 2.28MB <missing> 3 weeks ago /bin/sh -c #(nop) ENV ASPNETCORE_URLS=http:… 0B <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get ins… 41.3MB <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:ba0c39345ccc4a882… 69.2MB
删除镜像命令为
$ docker image rm [Image Name]
经过Dockerfile能够指定build镜像的步骤、每一步所执行的操做,只需一次编写,以后直接就能够方便地运行了。
下面即是一个最简单的Dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 5000 COPY . . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
Dockerfile的语法规则及经常使用的关键字为:
Dockerfile编写好后,在它所在的目录经过docker build就能够执行了,也能够经过-f指定Dockerfile所在的路径,使用-t 能够为要build的镜像指定一个名称。
$ docker build -t test:1.0
docker build会根据Dockerfile的内容,逐行根据关键字执行,每一步都会生成一个临时的中间镜像。这些中间镜像可使用docker image ls -a查看。
查看本机现有的容器,默认只显示正在运行的,增长-a可显示全部容器,包括中止的
$ docker ps -a
基于镜像建立并启动容器,-d 可让容器在后台运行,--name能够指定容器名称,经过--env传递环境变量,
$ docker run -d --name api1 [Image Name]
容器建立后,Docker会给它分配一个Container ID,也是128位,默认显示前12位,经过Container ID或者建立容器时指定的name,就能够控制容器的启动中止了。
$ docker stop <container id/name>
$ docker start <container id/name>
查看容器运行日志可使用:
$ docker logs <container id/name>
下面这条命令能够查询容器的全部基本信息,包括运行状况、存储位置、配置参数、网络设置等
$ docker inspect <container id/name>
docker inspect以JSON格式展现所有信息,也能够经过"-f"使用Golang模板来提取指定的信息
$ docker inspect -f {{.NetworkSettings.Bridge}} <container id/name>
实时查看容器所占用的系统资源,如CPU使用率、内存、网络和磁盘开销:
$ docker stats <container id/name>
在容器内部执行命令的方式
$ docker exec <container id/name> <cmd>
稍微复杂的应用都会使用多个容器,若是要一个一个容器地启动会很是麻烦,再加上集群和容器间的依赖,将使应用的维护变得很是困难。Docker compose提供了一种最基本的多容器管理的方式。
好比,WordPress应用的建立须要下面两条指令:
$ docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
$ docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
因为MyWordPress容器依赖其db容器,因此要先启动db容器。
中止的时候先中止MuWordPress容器,再中止db。
而使用Docker Compose就能够方便的管理存在多容器依赖的应用了。
首先须要单独安装docker-compose。
并编写docker-compose.yml文件,上面WordPress的命令改造为docker-compose.yml后的内容以下,使用yml语法:
wordpress: image:wordpress links: - db:mysql ports: - 8080:80 db: image:mariadb environment: MYSQL ROOT PASSWORD:example
而后在docker-compose.yml文件所在目录执行
$ docker-compose up
就能够一次启动WordPress所依赖的全部容器了。
以后应用的启停也很是方便:
$ docker-compose stop
$ docker-compose start
docker-compose在启停时,会自动识别容器间的依赖顺序,根据依赖顺序逐个启停容器。
Docker还支持命令的嵌套执行,好比
根据容器ID查找:
$ docker ps -a |grep 0453e874jh93
只显示容器相关的镜像和容器名称:
$ docker ps |awk '{pring $2,$NF}'
批量删除已经中止运行的容器:
$ docker rm $(docker ps -a -q)
参考资料 李金榜 尹烨 刘天斯 陈纯 著 《按部就班学Docker》