Docker部署

3 篇文章 0 订阅
2 篇文章 0 订阅

文章目录

1.简介

docker是一个开源的应用容器引擎,可以将应用及其依赖包,一起打包成一个镜像,在容器中使用的时候,也是进程隔离,相互之间没有任何借口

  • 一个完整的Docker由以下几个部分组成:
  1. Docker Client 客户端
  2. Docker Daemon 守护进程
  3. Docker Image 镜像
  4. Docker Container 容器
  • Docker功能特性
    隔离环境(系统,网络,文件系统)与应用;解决依赖与版本问题;易于开发,开箱即用;节点与容器快速扩容;镜像制作简单,管理方便

  • 应用场景

  1. web应用的自动化打包和发布;
  2. 自动化测试和持续集成,发布;
  3. 应用服务,如mysql,redis等;
  4. k8s私有云

1.1 与KVM对比

  • KVM简介
    在支持虚拟化的硬件基础上,在硬件的Hapervisor层进行硬件虚拟化,在这些V硬件上,需要安装新的操作系统,然后再安装服务
对比KVMDocker
安全性高,各个虚拟化之间,安装操作系统完全隔离,硬件隔离,相互连接需要通过TCP三次握手低,多个容器运行在同个沙盒中,虽然完全隔离,但是一个容器中毒,其他容器就存在危险
稳定性高,通过硬件虚拟化,稳定性很高,除非硬件损坏低,通过进程虚拟,进程存在宕机可能,且docker本身也存在宕机可能
资源占用高,新的系统所需磁盘,CPU,内存,网络带宽都较大,近似真是服务器低,一个操作系统上虚拟多个进程,相较于安装多个系统,占用的资源少得多
运行速度慢,创建,启动缓慢,需要安装系统快,容器启动极快,同个镜像支持同时启动多个镜像

2 安装docker

  • 基础环境:
    centos 7.5
  • 选择版本:
    Docker CE(社区版)
    Docker EE(企业版,收费)
    centos 7直接yum安装的docker版本太低,选择新建yum配置文件,安装最新的社区版
#安装依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2

#添加docker ce版本的yum源配置文件
curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

#安装ce版,配置开机启动
yum -y install docker-ce
systemctl start docker
systemctl enable docker
#查看版本
docker version

3 Docker的操作命令

添加docker国内镜像源

vim /etc/docker/daemon.json

#内容为
{
    "registry-mirrors":[ "https://registry.docker-cn.com" ]
}

#重新加载systemctl缓存,重启docker
systemctl daemon-reload
systemctl restart docker

3.1 查找镜像:search

docker search centos

#name:镜像名,*/*,作者/镜像名
#description:描述
#stars:星级
#official:是否官方
#automated:是否自动化

#查找星级多于100的centos镜像
docker search centos -f stars=100
#多条件查找使用参数--filter,查找官方发布,星级大于100的centos镜像
docker search centos --filter is-official=true --filter stars=100

3.2 下载镜像:pull

#可以先查找需要的镜像
docker pull centos:7
#centos:7  镜像名:版本

3.3 查看本地镜像:images

docker images
#respository:镜像仓库,下面罗列出本地已有镜像名
#tag:镜像标记(版本?区分同名镜像)
#images id:镜像ID号
#created:该镜像创建时间
#size:该镜像大小

3.4 本地构建自定义镜像:build

需要创建Dockerfile文件,另解

3.5 运行本地镜像:run

docker run -dit --name *** -p 2222:22 镜像ID
#-d:后台启动
#-i:可以进行命令交互
#-t:制作伪终端用于登录
#--name ***:指定容器的别称
#-p 2222:22:将本地2222端口映射到容器中 的22端口
#-e:启动时,设置环境变量

3.6 查看已有容器:ps

docker ps -a
#-a:查看所有的容器
#container id:容器ID
#status状态,up为正在运行,exit表示未运行
#不加-a参数只能查看已运行的容器

3.7 切入到容器进程:attach

docker attach ***
#指定容器ID切入一个status为up的容器
#输入exit退出容器,status会变成exit

3.8 停止运行中的容器:stop

docker stop ***
#指定容器ID停止

3.9 启动exit状态的容器:start

docker start 容器ID

3.10 删除exit状态容器:rm

docker rm 容器ID

3.11 删除未使用的镜像:rmi

docker rmi -f 镜像ID
#作容器启动的镜像是不能占用的,-f参数强制删除

3.12 保存新镜像:commit

将一个更改过的容器进程的容器状态保存为一个新的镜像

#切入到容器,修改内容,然后退出
docker attach 容器ID
mkdir yunjisuan
exit

#将更改后的容器进程保存为新镜像
docker commit 容器ID 作者/新镜像名(名称:版本)
#若成功保存,则以此新镜像为基础启动的容器中,也该存在刚才创建的目录

3.13 指定容器执行命令:exec

用于从本地操作系统上直接向容器进程发布执行命令返回结果

docker exec 容器ID ls /tmp
docker exec 容器ID 命令

docker exec -it 容器ID /bin/bash
#指定某容器启动一个bash交互界面,exit为退出,这种方式不会改变容器运行状态

3.14 本地与容器之间复制文件:cp

#将指定容器的文件或目录里复制到当前目录
docker cp 容器ID:/tmp/yun.txt
#复制本地文件到容器中
docker cp /tmp/yun.txt 容器ID:/tmp/

3.15 创建容器但不启动:create

docker create -it 镜像ID
#容器状态应该是EXIT

3.16 查看变化:diff

查看容器进程与源镜像的差别,作对比

docker 

3.17 实时监控容器变化:events

docker events
#需要另起窗口进行操作

3.18 将容器导出为本地文件:export

docker export 容器ID > test.tar
#将容器进程导出成一个tar包

3.19 将export导出的文件创建为镜像:import

用于将export导出的文件系统创建为一个镜像

docker import test.tar jc/centos:3

3.20 查看镜像历史修改记录:history

docker history 镜像ID

3.21 查看当前操作系统docker运行信息:info

docker info
#containers:容器进程数
#runnig:正在运行的容器数
#images:总镜像数
...等等

3.22 查看镜像详细信息:inspect

docker inspect 镜像ID

3.23 强行停止运行中的容器:kill

docker kill 容器ID

3.24 将镜像导出为本地文件:save

docker save 镜像名/ID > 文件名.tar
#把一个镜像压缩为一个文件

3.25 将save导出的文件重新加载为镜像:load

docker load < test.tar
#恢复时,镜像名和之前导出的时候保持一致

3.26 查看某容器进程的操作日志:logs

docker logs 容器ID

docker logs --tail 5 容器ID
#查看最后5行

3.27 暂停|恢复容器进程:pause|unpause

docker pause 容器ID         #暂停
docker unpause 容器ID       #恢复

3.28 列出容器的端口映射及协议:port

docker port 容器ID
#查看容器进程的端口映射及协议

3.29 容器重命名:rename

docker rename 容器原名称 容器新名称

3.30 重启容器进程:restart

docker restart 容器ID

3.31 时时输出容器的资源使用情况:stats

docker stats 容器ID
#保持输出页面,ctrl+c退出
docker stats 容器ID --no-stream
#--no-stream 只输出一次

3.32 指定镜像创建另一个镜像:tag

#例子:
docker tag test:1 test:2
#源镜像也可以指定镜像ID

3.33 显示容器的进程信息:top

docker top 容器ID

3.34 调整容器的启动配置

#查看命令帮助
docker update --help
#可以调整cpu,mem等

3.35 其他一些辅助命令:

#查看版本
docker version
#监听容器的退出状态并返回状态码,但是需要另起状态
docker wait 容器ID
#login 用于登陆docker hub官方共有仓库
#logut 登出
#push 将本地镜像提交到docker hub
#docker hub国内不能注册

dockerhub官方公有镜像仓库:https://hub.docker.com/

4 管理应用程序数据

4.1 分类

  • volumes:卷管理,docker管理宿主机文件系统的一部分,默认的目录是/var/lib/docker/volumes/
  • bind mounts:绑定挂载,指定本地目录挂载到容器中的目录,使得容器产生的数据能保存在本地目录
  • tmpfs:挂载存储在宿主机系统的内存中个,而不会写入磁盘

4.2 volume卷管理

创建卷,查看卷信息

#创建一个卷,默认创建到默认目录
docker volume create nginx-vol
#查看已有volume卷
docker volume ls
#查看详细信息
docker volume inspect nginx-vol

volume的挂载方式

#在运行镜像的时候挂载
#例如启动一个nginx镜像
docker run -dit --name nginx-test -p 80:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
#--mount:代表启用挂载
#src:卷的名字,自动去默认目录找
#dst:挂载到容器中的路径

#验证,先在容器中创建一个文件
docker exec nginx-test touch /usr/share/nginx/html/test.txt
docker exec nginx-test ls /usr/share/nginx/html/

#再查看本地是否写入
ls /var/lib/docker/volumes/nginx-vol/_data/
#成功挂载时,容器进程产生的数据就写入磁盘了,实现持续化存储

4.3 bind mount 绑定挂载

#这种方式可以创建一个目录用来挂载
mkdir /data/nginx
docker run -dit --name nginx-test2 -p82:80 --mount type=bind,src=/data/nginx,dst=/usr/share/nginx/html nginx

#若想挂载volumes卷中的目录,启动镜像时需要指定卷下的_data目录:
docker run -dit --name nginx-test2 -p81:80 --mount type=bind,src=/var/lib/docker/volumes/nginx-vol/_data,dst=/usr/share/nginx/html nginx
#type:指定挂载种类为bind
#-p 81:80:启动多个nginx容器时,注意本地端口不要冲突
#--name nginx-test2:容器名也不要冲突
#多个容器可以挂载同个卷(目录)

5 部署LNMP+wordpress个人博客

5.1 部署mysql容器

下载一个wordpress博客
wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

#先创建一个自定义网络,驱动为bridge
docker network create lnmp
#查看创建的docker网络
docker network ls

#下载mysql 5.6镜像
docker pull mysql:5.6
docker run -dit --name lnmp_mysql --network lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 --character-set-server=urf8
#不指定type,则适用volumes挂载,会若无此卷,会子弟用创建
#-e:在启动镜像时,设置环境变量

#在lnmp_mysql容器中创建一个库
docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "create database wp"'
#sh -c:让bash将一个字符串作为完整的命令来执行

5.2 部署nginx+php环境容器

#创建一个目录,作为挂载的网页目录
mkdir -p /data/nginx/
#将下载的wordpress解压到此目录下
tar xf wordpress-4.7.4-zh_CN.tar.gz -C /data/nginx/
mv /data/nginx/wordpress/* /data/nginx/
rm -rf /data/nginx/wordpress

#下载richarvey/nginx-php-fpm镜像,然后启动
docker pull richarvey/nginx-php-fpm
docker run -dit --name lnmp_web --network lnmp -p 88:80 --mount type=bind,src=/data/nginx,dst=/var/www/html richarvey/nginx-php-fpm

#最后使用浏览器访问IP:88端口,访问成功,安装好博客就搭建好了
#需要注意的是此处的mysql主机需要指定本地IP
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值