快速上手Docker

一、Docker介绍

Docker项目的目标是实现轻量级的操作系统虚拟化解决方案,Docker的基础是Linux 容器(LXC)等技术。

容器与虚拟机比较:
容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面上实现。与传统虚机相比,Docker优势体现为启动速度快、占用体积小。
快速上手Docker_第1张图片
Docker服务器与客户端:
C/S架构软件,Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具以及一整套RESTful API。可以在同一台宿主机上运行Docker客户端和守护进程,也可以从本地Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
快速上手Docker_第2张图片
Docker镜像与容器:
当成iso文件---->装到不同的虚拟机上---->开机(进入了操作系统)---->一个容器就是一个操作系统

Docker安装:
Windows:一路下一步即可。
Centos(Redhat,遵循GNU协议)为例:

# 下载安装
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce
# 查看版本
docker -v
# 启动docker
systemctl start docker

二、Docker基本操作

镜像操作
1.查询镜像(去哪查的hub.docker,官方镜像仓库)
输入命令:docker search centos # 一般不用
直接在仓库里搜:官方镜像仓库地址

2.下载镜像

docker pull 镜像名字:标签
docker pull centos:centos7

3.查看镜像

docker images

4.删除镜像

docker rmi 镜像id 或 镜像名字:tag
docker rmi `docker images -q`  # 删除所有镜像

容器操作
1.查看容器

# 查看正在运行的容器
docker ps
# 查看所有容器(包括停止的)
docker ps –a

2.创建与启动容器(创建并运行)

docker run -di --name=centos7 -p 3306:3306 -v /root/s18:/root/s18

-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端,一旦退出,容器也就退出了。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
–name=名字 给容器起个别名,如果不写,随机起一个名字。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射。
-v: 目录挂载 宿主机目录:容器目录。

# 从宿主机进入到容器内部
docker run -di --name=centos7 centos:centos7
docker exec -it 34fe /bin/bash   # 进入到容器内部
# 在容器上运行 /bin/bash  给我一个伪终端,在伪终端里直接操作容器

3.停止/启动/删除容器

# 停止容器
docker stop 容器id
#启动容器
docker start 容器id
# 删除容器
docker rm 容器id

4.文件拷贝
由于没有做目录映射,把宿主机的文件copy到容器内

docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp  /root/s18/lqz.txt  mysql:/root

把容器内的文件copy到宿主机上(在宿主机上执行)

docker cp 容器名称:容器目录 宿主机文件或目录

三、应用部署

1.部署mysql

docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2.部署redis(目录挂载)

docker pull redis

准备文件redis.conf

vi redis.conf
bind 0.0.0.0   
daemonize NO
protected-mode yes   # 使用保护模式,连接需要密码
requirepass 123456   

启动docker容器,执行redis-server /etc/redis/redis.conf命令

docker run -p 6379:6379 --name redis_6379 -v /root/s18/redis/conf/redis.conf:/etc/redis/redis.conf -v /root/s18/redis/data:/data -d redis redis-server /etc/redis/redis.conf

3.部署nginx(如果镜像不存在,会自动下载,并运行)

docker run -di --name=mynginx -p 8080:80 nginx
docker run -di --name=mynginx -v /root/s18/www:/usr/share/nginx/html -p 8080:80 nginx

四、迁移备份

1.容器保存为镜像

docker commit 容器名 镜像名
docker commit centos7777 centos7_vim
# 运行容器
docker run -di --name lqz centos7_vim

2.把镜像打成压缩包

docker save -o centos_vim.tar centos7_vim
# 基于压缩包恢复回镜像
docker load -i centos_vim.tar

五、自定义镜像

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

常用命令:

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER 声明镜像的创建者
ENV key value 设置环境变量(可以写多条)
RUN command 是Dockerfile核心部分(可以写多条)
ADD source_dir/file_dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file_dest_dir/file 和ADD相似,但是如果有压缩文件并不能压缩
CMD 指定容器创建时的默认命令(可以被覆盖)
ENTRYPOINT 设置容器创建时的主要命令(不可被覆盖)
EXPOSE 声明容器运行时监听的特定网络端口
VOLUME 为容器创建挂载点或声明卷

Dockerfile案例1---->在centos7上安装vim:

vim Dockerfile
FROM centos:centos7
MAINTAINER lqz
ENV password 123456
RUN yum install vim -y
ADD ./lqz.txt /lqz.txt
COPY ./lqz.txt /lqz.txt
WORKDIR /home

把dockerfile文件编译成镜像

docker build -t='vim2_img' .

Dockerfile案例2---->运行django项目:

FROM python3.6
MAINTAINER lqz
COPY ./req.txt /req.txt
RUN pip install -r req.txt
RUN mkdir lqz
COPY ./项目 /soft/项目
CMD ["python","/soft/项目/manage.py","runserver 0.0.0.0:8080"]

六、容器编排

docker-compose:对单机情况下多个容器的编排
k8s:多机情况下的容器编排

Docker Compose是一个能一次性定义和管理多个Docker容器的工具。
可以对django、mysql、redis、前端、nginx等容器编排。

下载安装:

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.1.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose  # 加执行权限

案例---->小型web服务项目搭建:
第一步:编写Dockerfile

FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

第二步:编写docker-compose.yml

version: "3"
services:
  redis:
    image: redis
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis

第三步:编写app.py

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host='redis', port=6379)  # 写容器名称,自动找到redis


@app.route('/')
def hello():
    redis.incr('hits')
    return '你好! 查看 %s 次, hostname 是 %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

第四步:运行

docker-compose up

你可能感兴趣的:(docker,docker)