Docker

Docker简介
自动化部署
1.编写代码,修改代码
2.提交代码到git/svn/gitlab
3.jenkins自动检测到git/gitlab/svn代码更新,从git/gitlab/svn拉取最新代码
4.jenkins自动编译
5.jenkins自动打成能运行的war/jar包或者其他语言可以运行的对应的包
6.jenkins自动上传可以运行的包到docker宿主机目录
7.jenkins自动构建web容器镜像,包含项目代码demo
8.jenkins自动启动镜像,编程容器,映射端口
9.最后就有项目运行界面
10.测试人员可以安装这种运行在测试服务器进行测试
12.运维人员就可以用同样的部署运行在生成服务器上面
docker 的广泛使用和docker的好处
1)区分开发 测试 运维的分工,出现问题不会互相推卸责任
2)可以合理利用服务器资源,不会像vmware的使用那么庞大
3)可以快速使用docker实现mysql redis nginx 的机器和负载均衡
4)方便实现自动化部署
5)k8s
docker目标
掌握Docker基础知识,能够理解docker镜像和容器的概念
完成docker安装和启动
掌握docker镜像与容器相关的命令
掌握Tomcat mysql nginx等软件的部署
掌握docker迁移和备份相关的命令
能够运行dockefile编写创建容器的脚本
能够搭建与使用dock所有仓库
虚拟化
在计算机中,虚拟化是一种资源管理技术,是讲计算机各种实体资源,比如服务器,网络,内存以及存储等,给与
抽象,转换后呈现出来,打破实体机构间的不可分割的障碍,使用户可以比原来更好的利用这些资源,这些资源的
新虚拟部分是不受现有的资源的架设方式,地域或者物理状态的限制,一般所指的虚拟化资源包括计算能力和存储
能力。
在实际生产中,虚拟技术主要解决高性能的物理硬件过剩和老的旧的设备硬件能力过低的重新组装使用,透明化底
层物理硬件,从而最大化的利用物理硬件对资源充分利用
虚拟化技术包括:软件虚拟化,内存虚拟化 硬件虚拟化 网络虚拟化 桌面虚拟化 服务虚拟化 虚拟化等
什么是docker
docker是一个开源的项目,是在2013年,最初由dotcloud公司内部的一个业余的项目发展起来的,它基于google
公司推出go语言实现的,docker项目加入linux基金会,遵循了apche2.0协议,项目公布在github上面。
docker项目目标是实现轻量级的操作系统虚拟化解决方案,docker的基础是linux容器(LXC)技术
在LXC基础上docker进行了进一步开发,让用户不需要关心容器的管理,使用户操作简单,用户操作docker就像操
作一个快速轻量级的虚拟机一样简单。
为何选择docker
(1)上手快
用户只需要几分钟,就可以把自己的程序“docker化”,随后,就可以创建容器来运行程序。大多数docker容器只需
要1秒就可以启动。由于去除了管理程序开销,docker容器拥有很高的性能,同时一台宿主机可以运行多个容器,
使用户可能的利用系统资源
(2)职责划分明确
使用docker,开发人员只需要关心容器中运行的程序,而运维人员只需要关心如何管理容器。docker设计目的就
是要加强开发人员写代码的开发环境与应用部署的环境要一致。从而降低那种“开发时一切正常,肯定是运维的问
题(测试是正常的,上线后出现了就归结于运维问题)”
(3)快速高效的生命周期
docker的目标之一,就是缩短代码开发测试部署,上线运行的周期,让你的程序具备可移植性,易于构建,并易于
协作(通俗讲,docker就像一个盒子,里面可以装很多物件,如果需要这些物件可以直接从盒子里拿走,而不要从
该盒子一件件去取)
(4)鼓励使用面向服务架构
docker鼓励使用微服务,docker推荐单个容器只运行一个应用程序或者进程。这就形成了一个分布式的应用程序
模型。在这种模型下,应用程序和服务可以表示为一系列的互联容器(可以在一个容器里运行多个程序)
容器和虚拟化比较
Docker 面向对象
镜像 类
容器 对象
上图比较了docker和传统的虚拟机不同之处,可以见容器在操作系统层次上虚拟化,直接复用本地的操作系统,而
传统的方式则在硬件上实现。与传统的相比,docker优势在于启动快,体积小。
Docker 组件
docker服务器与客户端
Docker是一个客户端-服务器(c/s)架构程序,docker客户端只需要向docker服务器或者守护进程发出请求,服务
器或者守护进程将完成所有的工作并返回结果。Docker提供了一个命令行工具Docker以及一套RESTful api操作。
你可以在同一台宿主机上运行docker守护进程和客户端。也可以从本地docker客户端连接到运行另一台宿主机的
远程docker守护进程
docker镜像与容器
容器与镜像的关系类似于面向对象中的对象与类。
docker组件说明
标题 说明
镜像
(Images)
Docker镜像用于创建Docker容器的模板
容器
(Container)
容器是独立运行的一个或者一组应用
客户端
(clinet)
Docker客户端通过命令行或者其他工具使用dockerapi与docker的守护进程通信
主机(Host) 一个物理或者虚拟机用于执行docker守护进程和容器
仓库
(Registry)
Docker仓库用来保存镜像,可以理解为代码控制中代码仓库。Docker Hub(https://hu
b.docker.com/)提供了庞大的镜像集合供我们使用
DockerMachine 是一个简化Docker安装的命令工具,同个一个命令行既可在响应的平台上安装docker。
virtualbox Microsoft Aure
Docker安装与启动
安装Docker
Docker官方建议在Ubuntu中安装,因为Docker基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先
更新或者打补丁的,在很多版本的centos中不支持更新最新的一些补丁。
但是企业里面大部分使用是centos系统,因此我们开发也使用centos,但是我们建议使用centos7以上的版本,在
centos6中,安装前需要安装很多其他环境以及docker的补丁包。
前期准备 centos7的系统,上面可以上外网
1)yum包更新到最新
2)安装需要的软件包,yum-util提供了yum-config-manager功能,其他俩个是devicemapper的驱动依赖
3)yum 源设置阿里云
4)安装docker
sudo yum update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
5)安装后查看docker版本
设置docker 仓库的国内镜像
ustc是老牌的linux镜像提供者,不要需要注册直接使用
1)编辑文件
2)在该文件输入内容
docker的启动与停止
systemctl命令是系统服务管理指令
启动docker:
停止docker
重启docker
查看docker状态
yum list docker-ce --showduplicates | sort -r //查看版本
sudo yum install docker-ce
sudo yum install <版本> # sudo yum install docker-ce-17.12.0.ce
docker -v
nano /ect/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
开机启动
查看docker概要信息
查看docker帮助文档
运行第一个程序
systemctl enable docker
docker info
docker --help
docker run hello-world
参考文档
https://www.cnblogs.com/8000cabbage/p/7965489.html
升级linux内核方法
1)启用 elrepo仓库
2)查看当前当前可以使用的linux内核
3)安装linux新的内核版本
4)reboot
docker: Error response from daemon: OCI runtime create failed: container_linux.go:344:
starting container process caused "process_linux.go:293: copying bootstrap data to pipe
caused \"write init-p: broken pipe\"": unknown.
linux版本太低需要升级
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml
5)查看当前版本
6)设置默认内核,启动项
docker 命令
镜像相关的命令
查看镜像
uname -a
nano /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
REPOSITORY:镜像的名称
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED :创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下。
搜索镜像
https://hub.docker.com/
如果我们想通过命令的方式查询镜像,可以通过命令搜索
docker images
docker search 镜像名称(mysql)
NAME:仓库名称
DESCRIPTION:镜像的描述
STARS :用户评价,反应一个镜像受欢迎的程序
OFFICI:是否官方
拉取镜像
拉取镜像就是从中央仓库https://hub.docker.com 拉取镜像到本地
例如我们想要myql
删除镜像
安装镜像ID删除镜像
前期是根据当前创建的容器要关闭
删除所有镜像
容器相关的命令
创建容器和启动容器
docker pull 镜像名称
docker pull mysql
docker rmi 镜像ID
docker rmi `docker images -q`
创建容器命令:docker run
对应参数说明:
-i :表示运行容器
-t:表示容器启动后进入该容器执行命令,加入俩个参数后,容器创建就能登录进去,分配一个伪终端
-name:为创建的容器命名
-v:表示目录映射关系(前面是宿主机目录,后者是容器的目录)可以使用多个-v做多个目录或者文件的映射,注
意:最好使用目录映射,在宿主机上修改文件,然后共享到容器中
-d :在run后面加-d参数,则会创建一个守护进程在后台运行(这样创建后就不会自动登录容器,如果只加-it就会在
创建容器中进入容器)
-p :表示端口映射,前者是宿主机端口,后者是容器的银蛇端口,可以使用多个-p做多个端口的映射
(1)交互式的创建容器
退出当前容器
(2) 后台启动容器的进程
(3) 登录守护进程容器的方式
docker run -it(-i -t) --name=容器名称 镜像名称:标签 /bin/bash
exit
docker run -d --name=容器名称 镜像名称:标签
docker exec -it 容器名称(或者容器ID) /bin/bash
案例:docker exec -it mycentos2 /bin/bash
查看容器
查看正在运行的容器
查看所有的容器
查看最后一次运行的容器
查看停止的容器
停止与启动容器
停止容器:
启动容器:
文件拷贝
如果我们需要将文件拷贝容器内可以使用cp命令
也可以将文件从容器拷贝出来
docker ps
docker ps -a
docker ps -l
docker ps -f status=exited
docker stop 容器名称(或者容器ID)
docker start 容器名称(或者容器ID)
docker cp 需要拷贝的文件或者目录 容器名称:容器目录
docker cp 容器名称:容器目录 需要拷贝的文件或目录
目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器的目录进行映射,这样我们就可以通过修改宿主机某个目录的
文件从而影响容器。
创建容器 添加-v参数 宿主机目录:容器目录
可以共享多个目录,可以出现权限不足。 selinux权限去掉,--privileged=true来解决目录没有权限的问题
查看容器的ip
我们可以通过以下命令查看容器的运行各种参数
也可以执行执行命令输出ip
删除容器
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos
docker inspect 容器名称(容器ID)
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
docker rm 容器名称(容器ID)
注意:删除image
docker rmi imageid 前期是根据这个image的容器要删除
docker rm 容器名称 删除容器 要先停止对应的容器
应用部署
mysql 部署
1)拉取mysql镜像
2)创建容器
-p 代表端口映射,宿主机端口:容器运行端口
-e 添加环境变量MYSQL_ROOT_PASSWORD 是root的登录密码
3)远程连接mysql
宿主机端口(192.168.154.201:33306) root 123456
tomcat部署
1)拉取镜像
2)创建容器
-p创建地址映射
3)在/usr/local/webapps 创建1.html
4)访问
192.168.154.201:9000/1.html
docker pull centos/mysql-57-centos
docker run -id --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql57-centos
docker pull tomcat
docker run -id --name=mytomcat -p 9000:8080 -v
/usr/local/webapps:/usr/local/tomcat/webapps tomcat
hello world
Nginx部署
1)拉取镜像
2)创建Nginx容器
redis部署
1)拉取镜像
2)创建容器
迁移和备份
容器保存为镜像
我们通过命令将容器保存为镜像
镜像备份
我们需要通过命令将镜像打成tar文件
docker pull nginx
docker run -id --name=myNginx -p 80:80 nginx
docker pull redis
docker run -id --name=myredis -p 6379:6379 redis
docker commit mycentos3 mycentos3_1
docker save -o mycentos3.tar mycentos3_1
命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量(可以写多条)
RUN command 是DockerFIle的核心部分
ADD
source_dir/fire_dest_dir/file
将宿主机的文件复制到容器内,如果是一个压缩文件,将会复制后自动
解压
COPY
source_dir/fire_dest_dir/file 和ADD相似,如果有压缩不能解压
WORDIR path_dir 设置工作目录
镜像的恢复与迁移
1)删除mycentos3_1对应的镜像,然后恢复
-i 输入文件
执行后再次查看,可以看到镜像已经恢复了
DockerFile
什么是DockerFile
DockerFile是由一系列命令和参数构成的脚本,这些命令用于基础镜像并最终创建一个新的镜像
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境
2、对于测试人员:可以直接拿开发时构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作
3、对于运维人员:在部署时,可以实现应用的无缝移植
DockerFile常用的命令
docker load -i mycentos3.tar
使用docker部署一个Golang
1)安装docker (已经安装)
2)mkdir myDocker
3)cd myDocker && touch Dockerfile
4)Dockerfile写入脚本
5)编写mian.go 放入到myDocker下
FROM golang # 母镜像
MAINTAINER zhang #开发作者
WORKDIR $GOPATH/src/godocker #工作目录
ADD . $GOPATH/src/godocker #将文件复制到镜像中
RUN go build main.go #执行操作(就跟在终端执行语句一样)
EXPOSE 8080 #暴露端口
ENTRYPONIT ["./main"] #程序入口
package main
import (
"net/http"
"fmt"
)
func myHandler(w http.ResponseWriter,r *http.Request) {
fmt.Fprintln(w,"hello go")
}
func myHelloHandler(w http.ResponseWriter,r *http.Request) {
fmt.Fprintln(w,"hello")
}
6)构建镜像
7)docker images 查看创建的镜像
8)docker run -p 8080:8080 -d zczdocker
9)本机上访问 localhost:8080/hello 返回hello
func main() {
http.HandleFunc("/hello",myHelloHandler)
http.HandleFunc("/go",myHandler)
//net/http
http.ListenAndServe(":8080",nil)
}
docker build -t zczdocker .
出现successfully build ...
说明构建成功

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值