Docker基础

什么是Docker

Docker:an open source project to pack,ship and run any application as a lightweight container.
将任何应用以轻量级的形式来打包,发布和运行

Docker可以被粗糙地理解为轻量级的虚拟机。
在这里插入图片描述

Docker利用Host OS里面的namespace,controlgroup来做到将应用程序分离,因为Docker没有hypervisor虚拟层,它会比虚拟机轻量很多,包括程序的启动速度以及存储的需求等等。

安装Docker

windows

1.前往Docker官网下载Docker
2.安装
在这里插入图片描述

3.命令行运行Docker
在这里插入图片描述

Linux centos7.3
# O-是大写的o和减号,-q标识输出要简单,O-标识标准输出,而不是输出到文件
sudo wget -qO- https://get.docker.com | sh
# 把xxx用户添加到docker用户组中
sudo usermod -aG docker xxx 
#启动docker服务
service docker start
#设置成开机自启
sudo chkconfig docker on

术语

English中文
host宿主机
image镜像
container容器
registry仓库
daemon守护进程
client客户端

Docker命令

命令用途
docker pull获取image
docker build创建image
docker images列出image
docker run运行container
docker ps列出正在运行的container
docker rm删除container
docker rmi删除image
docker cp在host和container之间拷贝文件
docker commit保存改动为新的image

Dockerfile

通过编写简单的文件自创docker镜像。
1.创建文件Dockerfile,内容为

FROM alpine:latest
MAINTAINER spring
CMD echo "Hello Docker!"

alpine为专门为Docker设计的一款体积很小的linux,MAINTAINER 作者

2.运行Dockerfile
-t 表示给一个标签叫做hello_docker,. 表示路径名,将该路径下所有文件都送给Docker engine

docker build -t hello_docker .

在这里插入图片描述

docker images hello_docker

REPOSITORY TAG IMAGE ID CREATED SIZE
hello_docker latest 77ca1e37168e 13 seconds ago 4.413 MB

docker run hello_docker

Hello Docker!

复杂的Dockerfile
FROM ubuntu
MAINTAINER spring
# 采用国内镜像下载地址
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
# 将nginx在前台执行,而不是作为守护进程
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
EXPOSE 80

同目录下创建一个index.html

docker build -t hello_nginx .
docker run -d -p 80:80 hello_nginx
curl http://localhost
Dockerfile语法
命令用途
FROMbase image
RUN执行命令
ADD添加文件
COPY拷贝文件
CMD执行命令
EXPOSE暴漏端口
WORKDIR指定路径
MAINTAINER维护者
ENV设定环境变量
ENTRYPOINT容器入口
USER指定用户
VOLUMEmount point
镜像分层

Dickerfile中的每一行都产生一个新层
在这里插入图片描述

已经存在的image里面的层是只读的,一旦一个image被运行成为一个容器的话,会产生一个新层,这一次是可读可写的。
分层的好处:多个image可以共享分层,这样存储压力就小很多。

Volume

提供独立于容器之外的持久化存储

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

在这里插入图片描述

这个路径,Alpal的主机里面,不是在容器里面

cd    /var/lib/docker/volumes/8e02ff6ffec3441a4812212bdbbb6b69aaf69fcdba72855a55c65686b80ff51d/_data
ls
cat index.html
echo "it's 2018" > index.html

在容器里面查看:

docker exec -it nginx /bin/bash
cd /usr/share/nginx/html/
cat index.html
将本地目录挂载到容器里面的数据卷

将目录html挂载到容器

# /html为绝对路径,windows下如果文件在E盘下,需要写E:/html
docker run -p 80:80 -d -v /html:/usr/share/nginx/html nginx

问题:
1.windows下运行如果出错:docker: Error response from daemon: E: drive is not shared. Please share it in Docker for Windows Settings.
需要右键点击任务栏Docker图标选择Setting:
在这里插入图片描述

2.共享磁盘可能会出现
Firewall detected
A firewall is blocking file sharing between Windows and the containers. See documentation for more info.
Windows防火墙阻止Docker共享目录解决方案:
(1)进入网络和共享中心;
(2)选择“VEthernet (DockerNAT) ”适配器;
(3)选择“属性”
(4)卸载“Microsoft 网络的文件和打印机共享”
(5)重新安装“Microsoft 网络的文件和打印机共享”,点击“安装”,选择“服务”,点击“添加”,选择“Microsoft”->“Microsoft 网络的文件和打印机共享”,点击“确定”
(6)安装完成后,重新配置驱动盘即可。

创建一个仅有数据的容器并将该容器挂载到其他容器中
docker create -v E:/data:/var/mydata --name data_container ubuntu
docker run -it --volumes-from data_container ubuntu /bin/bash
mount

会发现一个mydata的文件夹

ca /var/mydata
touch whatever.txt

在本地会发现一个whatever.txt文件

Registry镜像仓库

# 搜索镜像
docker search whalesay
# 拉取下来
docker pull whalesay
# 将自己镜像push到仓库
docker push myname/whalesay
国内仓库

daocloud
时速云
阿里云

docker search whalesay
docker pull docker/whalesay
docker run docker/whalesay cowsay Docker很好玩!

在这里插入图片描述

# 创建自己的tag
docker tag docker/whalesay spring/whalesay
# 上传到仓库
docker push spring/whalesay

如果提示unauthorized: authentication required,需要登录自己的Docker帐号。

docker login
Username:
Password:

上传成功后,在Docker官网可以看到自己上传的镜像:
在这里插入图片描述

compose

Mac和Windows的Docker中已带有compose,Linux需要单独安装。

curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s )-$(uname -m) > /usr/local/bin/docker-compose
# 给与可执行权限
chmod a+x /usr/local/bin/docker-compose
ghost配置

Docker:

FROM ghost
COPY ./config.production.json /var/lib/ghost/content/config.production.json
EXPOSE 2368
#CMD ["npm","start","--production"]

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": 3307,
            "charset": "utf8"
        }
    },
    "mail": {
        "transport": "Direct"
    },
    "logging": {
        "transports": [
            "file",
            "stdout"
        ]
    },
    "process": "systemd",
    "paths": {
        "contentPath": "/var/lib/ghost/content"
    }
}
nginx配置

Dockerfile:

FROM 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
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:
      - ./data:/var/lib/mysql
    ports:
      - "3307:3307"

在这里插入图片描述

在这里插入图片描述

docker-compose.yml常用命令
命令用途
build本地创建镜像
command覆盖缺省命令
depends_on链接容器
ports暴漏端口
volumes
imagepull镜像
up启动服务
stop停止服务
rm删除服务中的各个容器
logs观察各个容器的日志
ps列出服务相关的容器
docker-compost stop     #停止容器   
docker-compose rm            #删除容器
docker-compose build         #重新建立
docker-compose up -d        #启动运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值