第一步下载docker

yum install docker
service docker start
usermod -aG  docker  username  #将docker 允许username 用户使用不只是root

简单介绍docker 架构

1.docker daemon 是docker的核心,他负责下载docker 镜像,运行dokcer容器,我们输入的命令都是交给docker daemon 来实际操作的。

2.registry是docker 的仓库,所有的docker 镜像存储在里面

3.所有的镜像在registry 中都被称作为image

简单的操作

docker run ubuntu echo hello world
docker images #可以看到所有docker 的images
docker run -p 8080:80  -d nginx   -p #端口映射把远端的80映射到本地的8080, -d 把container 作为守护进程执行的。

curl http://lcoalhost 就能访问到nginx的主页面

docker ps 查看当前运行的容器,最前面是容器的id

docker cp index.html 容器id://usr/share/nginx/html 将文件复制到nginx的服务目录下

docker stop 容器id 停止docker

注意一下:当你结束了这个容器之后我们的容器就会重置,因为docker对容器的改动是默认不保存的

docker commit -m ‘message’ 容器id 保存当前容器,会返回一串id 这个是新产生的容器的id
这时候你使用 docker images 可以看到我们新产生一个没有名字的容器

我们可以在上一条命令后面直接跟上名字
docker commit -m ‘message’ 容器id 名字

docker rmi 容器id 我们使用这个命令把之前的那个无名氏删除

docker ps -a 可以列出曾经的所有容器记录

docker rm 容器1 id 容器2 id 清除记录

dockerfile 自创文件建立docker镜像

FROM alpine:latest #基础镜像
MAINTAINER K0rz3n #作者
CMD echo 'hello world' #命令

mkdir newdocker
cd newdocker 
touch Dockerfile
vim Dockerfile    

alpine 是专门为docker构建的很小的linux 环境
docker build 构建新的image

docker build -t 标签 . (这个点带表路径,表示把当前路径下的所内容交给docker engine )

docker images 标签 就会显示刚刚产生的docker run 标签 运行docker

FROM ubuntu
MAINTAINER  K0rz3n
RUN  sed -i 's/archieve.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
CPOY index.html    /var/www/html
ENTRYPOINT ['/usr/sbin/nginx','-g','daemon off';] #这个是容器的入点,在命令行中用空格分隔执行的命令
EXPOSE 80 #暴露端口

docker build -t hello_nginx .
docker run -d -p 8000:80 hello_nginx 

注意:没有指定ENTRYPOINT 的时候我们使用CMD启动,当指定了ENTRYPOINT 之后我们的CMD就成了ENTRYPOINT 的参数

###docker 中的镜像分层
Dockerfile 中的每一行都产生一个新的层
已经存在image 里面的层都是只读的,一旦一个image 被运行成为一个容器就会产生一个新的层,可读可写,这保证了容器是可以被修改的。
分层的目的是实现不同image 之间的层的共享,减轻服务器的压力。

###volume介绍与基本的使用
能提供独立于容器之外的持久化存储,还能提供容器与容器之间共享的数据

docker run -d --name nginx -v /usr/share/nginx/html nginx  

-v 是挂载卷的意思

docker inspect 名字 检查容器
Source 是宿主机的地址
Destination 是容器内部的地址
表示把宿主机的这个地址挂载到了容器中

ls 到这个物理机地址可以看到默认的两个文件

docker  exec -it  名字 /bin/bash  #进入容器  it表示交互的意思

cd /usr/share/ngnix/html #进入容器的实际目录

exit #退出容器

docker run -p 8080:80 -d -v $PWD/html:/usr/share/nginx/html nginx   
# $PWD是shell的一个环境变量,始终指向当前目录#意思是将当前目录下的html 目录挂载到容器的 /usr/share/nginx/html 下,这样在本地修改的东西就会自动同步到容器中,所以这是一个很好的开发环境

mkdir vol3
cd vol3
mkdir data
docker create -v $PWD/data:/var/data --name data_container ubuntu #产生了一个仅有数据的容器并挂载到ubuntu上
docker run  -it --volumes-from  data_container ubuntu /bin/bash #直接进入了容器
mount 查看ubuntu的挂载    
找到/var/mydata 这就是我们挂载的数据 
cd /var/data
touch whatever.txt
exit

进入我们的本机的data目录,那么我们就会看到这个在容器中创建的文件,说明我们的挂载是成功的

###Registry 的介绍与使用
这是一个镜像仓库,用户可以往里面上传有用的镜像供更多的用户下载使用。daemon会把镜像从registry中拉下来。
daemon 是守护进程,接收用户的命令

docker search 镜像名     #查找镜像
docker pull 镜像名            # 拉取镜像
docker push 镜像名        #上传字节的镜像

国内的一些仓库
daocloud
时速云
aliyun

docker search whalesay
docker pull docker/whalesay
docker run docker/whalesay cowsay 内容    # 你就会看到画出一个鲸鱼说了内容

docker tag docker/whalesay xx/whalesay 修改tag为 xx/whalesay
docker push xx/whalesay #注意这里面需要一个登陆的操作,需要先有一个账号。
docker login

在网页里登陆dockerhub就会看到自己上传的镜像的细节

compose的下载

安装:Linux为例

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#这里的反引号意思是把这个命令的输出加到字段中,也可以用$()实现,uname -s 返回的是Linux uname -m 返回的是 x86_64

安装好之后我们看一下 /usr/local/bin/docker-compose 这个目录的权限

chmod a+x 修改权限为所人可执行
docker-compose --version 查看版本

###compose 实战搭建ghost博客程序
首先看一下 docker-compose.yaml文件
(yaml 是常见的配置文件的格式,通过缩进表示层级之间的关系)

进入docker 文件

mkdir ghost
cd ghost
mkdir ghost    
mkdir nginx
mkdir data
cd ghost

touch Dockerfile
vim Dockerfile

Dockerfile

FROM ghost
COPY ./config.js /var/lib/ghost/config.js
EXPOSE 2368
CMD ["npm","start","--prodection"]

config.js

var path = require['path'],
config;

config ={
        prodection:{
            url:'http://mytestblog.com',
            mail:{},
            database:{
                    client: 'mysql',
                    connection:{
                            host: 'db',
                            user: 'ghost',
                            password: 'ghost',
                            database: 'ghost',
                            port: '3306',
                            charset: 'utf8'
                    },
                    debug: false
            },
            paths:{
                    contentPath:path.join(process.env.GHOST_CONYENT,'/')
            },
            server:{
                    host:'0.0.0.0',
                    port:'2368'
            }
    }
};

回到上层目录,

cd nginx 
touch Dockerfile
vim Dockerfile

Dockerfile

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

新建nginx配置文件

touch nginx.conf

nginx.conf

worker_processes 4:
events {worker_connections 1024;}
http {
    server {
            listen 80;
            location / {
                    proxy_pass http://ghost-app:2368;
            }
    }

}

touch docker-compose.yml #yml是yaml的语法

vim    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_ROO_PASSWORD: mysqlroot
                        MYSQL_USER: ghost
                        MYSQL_PASSWORD: ghost
                volumes:
                        - $PWD/data:/var/lib/mysql
                ports:
                        - "3306:3306"
注意:

1.以上的yml文件特别注意缩进格式。
2.我们的监听的端口一定不能被占用,如果被占用那么请自行修改。

我们创建了三个文件,ghost nginx 是为了构建镜像用的,data 用来存放博客需要的数据

docker-compose up -d 

如果出错了我们修改错误后可以执行以下的命令

docker-compose stop 
docker-compose rm
docker-compose build
docker-compose up -d 

访问localhost
这样我们的博客系统就上线啦