Docker和虚拟机同样,都拥有环境隔离的能力,但它比虚拟机更加轻量级,能够使资源更大化地获得应用。首先来看Docker的架构图:java
理解其中几个概念:mysql
CentOS7系统下安装Docker为例。Docker 软件包和依赖包已经包含在默认的 CentOS-Extras 软件源里,安装命令以下:linux
yum -y install docker
启动docker后台服务:nginx
service docker start
验证是否安装成功:git
[root@localhost hemi]# docker version Client: Version: 1.13.1 API version: 1.26 Package version: <unknown> Go version: go1.8.3 Git commit: 774336d/1.13.1 Built: Wed Mar 7 17:06:16 2018 OS/Arch: linux/amd64 Server: Version: 1.13.1 API version: 1.26 (minimum version 1.12) Package version: <unknown> Go version: go1.8.3 Git commit: 774336d/1.13.1 Built: Wed Mar 7 17:06:16 2018 OS/Arch: linux/amd64 Experimental: false
更详细的针对各操做系统的安装见官方文档:https://docs.docker.com/install/github
镜像加速sql
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,咱们能够须要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。docker
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。json
请在该配置文件中加入(没有该文件的话,请先建一个):ubuntu
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
1)搜索镜像
能够在Docker Hub主页上搜索镜像,能够经过docker search命令搜索,如:
docker search [OPTIONS] TERM
OPTIONS说明:
[root@localhost hemi]# docker search -s 20 tomcat INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/tomcat Apache Tomcat is... 1757 [OK] docker.io docker.io/dordoka/tomcat Ubuntu 14.04, Or... 48 [OK] docker.io docker.io/tomee Apache TomEE is ... 47 [OK] docker.io docker.io/davidcaste/alpine-tomcat Apache Tomcat 7/... 24 [OK]
其中,
STARTS:镜像仓库收藏数
AUTOMATED:表示是不是自动构建的镜像仓库
2)下载镜像
docker pull [OPTIONS] NAME[:TAG]
OPTIONS说明:
举个栗子
docker pull java #从Docker Hub中下载最新版本的Java镜像 docker pull reg.itmuch.com/java:8 #从指定Registry中下载标签为8的Java镜像
3)列出镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS说明:
举个栗子:
列出本地镜像中REPOSITORY为ubuntu的镜像列表
[hemi@localhost ~]$ docker images ubuntu REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 0458a4468cbc 7 weeks ago 111.7 MB docker.io/ubuntu 15.10 9b9cb95443b5 20 months ago 137.2 MB
4)删除本地镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
OPTIONS说明:
1)新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(经常使用):
如:
docker run --name mynginx -d nginx:latest #使用docker镜像nginx:latest之后台模式启动一个容器,并将容器命名为mynginx。 docker run -p 91:80 -v /data:/data -d nginx:latest #使用镜像nginx:latest之后台模式启动一个容器,将容器的80端口映射到主机的91端口,主机的目录/data映射到容器的/data。
[hemi@localhost ~]$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
#使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
2)列出容器
docker ps [OPTIONS]
OPTIONS说明(经常使用):
3)中止容器
docker stop CONTAINER_ID/CONTAIN_NAME
4)强制中止容器
docker kill CONTAINER_ID/CONTAIN_NAME
5)启动已中止容器
docker start CONTAINER_ID/CONTAIN_NAME
6)重启容器
docker restart CONTAINER_ID/CONTAIN_NAME
7)进入容器
docker exec -it CONTAINER_ID bash
如:
[hemi@localhost ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 219371844a81 7f94db72116e "tomcat.sh" 7 seconds ago Up 7 seconds 8009/tcp, 8080/tcp, 0.0.0.0:91->80/tcp zen_kalam [hemi@localhost ~]$ docker exec -it 219371844a81 bash bash-4.2$
8)删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS说明(经常使用):
更多命令见Docker的官方文档:https://docs.docker.com/edge/engine/reference/commandline/
也能够利用命令行查看,如:
docker rm --help
此时浏览器访问结果以下表示正常
再次访问浏览器以下结果,表示修改正常
可是此时若是重启容器,则以前的改动将失效。若要保存修改能够提交保存为新镜像↓
此过程还能够用Dockerfile完成
一、首先新建Dockerfile,内容以下:
二、在Dockerfile所在路径执行如下命令构建镜像,并运行:
浏览器访问
Dockerfile官方文档:https://docs.docker.com/engine/reference/builder/
Dockerfile最佳实践:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
Docker Compose用来定义和运行多应用容器。使用Docker Compose大体有3个步骤:
①经过如下命令自动下载并安装适应系统版本的Compose:
curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
②为安装脚本添加执行权限:
chmod +x /usr/local/bin/docker-compose
安装完成。能够使用如下命令测试安装结果:
ocker-compose --version
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
输入docker-compose并按下Tab键,compose就能够自动补全命令了。
我的博客实例,含三个层,分别为nginx、ghost app、mysql
一、建立3个目录
二、进入ghost目录,建立两个文件
① Dockerfile
FROM ghost COPY ./config.production.json /var/lib/ghost/config.production.json EXPOSE 2368
②config.production.json
{ "url": "http://localhost:2368/", "server": { "port": 2368, "host": "0.0.0.0" }, "database": { "client": "mysql", "connection": { "host": "db", "user": "ghost", "password": "ghost", "database": "ghost", "port": 3306, "charset": "utf8" } }, "mail": { "transport": "Direct" }, "logging": { "transports": [ "file", "stdout" ] }, "process": "systemd", "paths": { "contentPath": "/var/lib/ghost/content" } }
三、进入nginx目录,配置
①Dockerfile
FROM docker.io/nginx COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80
②nginx.conf
worker_processes 4; events {worker_connections 1024;} http { server { listen 80; location / { proxy_pass http://ghost-app:2368; } } }
四、配置docker-compose.yml
在blog目录下建立docker-compose.yml文件
version: '2' networks: ghost: services: ghost-app: build: ghost networks: - ghost depends_on: - db ports: - "2368:2368" nginx: build: nginx networks: - ghost depends_on: - ghost-app ports: - "80:80" db: image: "mysql:5.7.15" networks: - ghost environment: MYSQL_ROOT_PASSWORD: mysqlroot MYSQL_USER: ghost MYSQL_PASSWORD: ghost volumes: - $PWD/data:/var/lib/mysql ports: - "3306:3306"
以上便可。随后在docker-compose.yml所在目录build镜像并运行
docker-compost stop #中止容器 docker-compose rm #删除容器 docker-compose build #从新创建 docker-compose up -d #启动运行
docker-compose命令-官方文档:https://docs.docker.com/compose/reference/overview/