Docker使用及介绍

Docker简介

1.1 什么是虚拟化

​ 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用

虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

1.2 什么是Docker

​ Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。

在这里插å¥å›¾ç‰‡æè¿°
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。

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

​ 在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

​ Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

1.3 为什么选择Docker?

上手快。

用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

职责的逻辑分类

使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”

快速高效的开发生命周期

Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)

鼓励使用面向服务的架构

Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

1.4 使用Docker的好处:

  • 简化配置

  • ​代码流水线(Code Pipeline)管理

  • 提高开发运维效率

  • 整合服务器

  • 资源隔离低消耗

  • 快速部署

2、搭建Docker

环境准备
  • 操作系统:Linux(RHEL、Centos、Ubuntu) / Windows(windows7.1、windows
    8)+VM+处理器需要支持硬件虚拟化

  • 本次演示使用的阿里ESC服务器:CentOS 7.6 64位

安装

​ Centos可以选择从yum仓库安装docker,安装命令:

​yum install docker

启动:service docker start

​ docker启动命令如下:

​ [root@iZwz91dtpo51xbpb7oheebZ ~]# service docker start
​ Redirecting to /bin/systemctl start docker.service

设置为开机启动命令

systemctl start docker

systemctl enable docker

查看状态:service docker status

[root@iZwz91dtpo51xbpb7oheebZ ~]# service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2019-11-18 09:30:17 CST; 26s ago
Docs: http://docs.docker.com
Main PID: 14554 (dockerd-current)
CGroup: /system.slice/docker.service
├─14554 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-ru…
└─14559 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0…

停止:service docker stop

[root@iZwz91dtpo51xbpb7oheebZ ~]# service docker stop
Redirecting to /bin/systemctl stop docker.service

3、安装一个官方镜像

查找可用的镜像:docker search portainer (search后面跟要搜索的镜像名字)

拉取:​ docker pull portainer/portainer (这里拉取dockerUi工具为例)

注:在docker的镜像索引网站上面,镜像都是按照“用户名/镜像名”的方式来存储的。有一组比较特殊的镜像,比如ubuntu这类基础镜像,经过官方的验证,值得信任,可以直接用 镜像名来检索到。

3.1 切换镜像仓库地址
默认的docker镜像仓库在dockerhub,网站美国,所以下载速度非常慢,为了解决这个问题,
国内的一些机构提供了镜像加速服务,最出名的就是阿里云,下面介绍如何配置阿里云镜像仓库

在我们的linux系统里,操作如下命令,找到文件:vim /etc/docker/daemon.json 然后添加如下内容:

	{
	  "registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"]
	}

其中加速地址即上边对应的加速器地址。最后保存该文件,重启docker服务,依次执行下边的命令:

 1.  systemctl daemon-reload
 2.  systemctl restart docker

4、 应用部署

MySQL部署
  1. 拉取mysql镜像

    docker pull centos/mysql-57-centos7
    
  2. 创建容器

    docker run -di --name=tensquare_mysql -p 33306:3306 -e YSQL_ROOT_PASSWORD=123456 mysql
    

    -p 代表端口映射,格式为 宿主机映射端口:容器运行端口

    -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码

  3. 远程登录mysql

    连接宿主机的IP ,指定端口为33306

Tomcat部署
  1. 拉取镜像

    docker pull tomcat:7-jre7
    
  2. 创建容器

    创建容器 -p表示地址映射

    docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
    
Nginx部署
  1. 拉取镜像

    docker pull nginx
    
  2. 创建Nginx容器

    docker run -di --name=mynginx -p 80:80 nginx
    
Redis部署
  1. 拉取镜像

    docker pull redis
    
  2. 创建容器

    docker run -di --name=myredis -p 6379:6379 redis
    
可视化管理Docker UI

以portainer、rancher为例

  1. 拉取镜像

    docker pull portainer/portainer
    
  2. 创建容器

    docker run -it --name docker-portainer -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
    

检查端口是否启起来。此时有使用阿里云ESC服务器需要配置安全组策略,开放端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ti6GLh2K-1574047534416)(D:\笔记\博客\docker\1.png)]

启动图形化管理工具后在宿主机,输入:http://自己ip地址:9000/
创建用户密码,密码至少为8位,比如:12345678,进入页面后,选择local environment。

5、Docker常用命令

  • docker ps 显示正在运行的容器

  • docker ps -a 显示所有的容器

  • docker ps -l 显示最近一次运行的容器

  • docker image ls 列出已安装的顶层镜像

  • docker images xxx 列出已安装的指定的某个镜像,xxx代表镜像名字,支持通配符

  • docker images -q 列出已安装的镜像ID

  • docker search xxx 搜索镜像名,xxx代表镜像名字,支持通配符

  • docker pull redis:3.0.7 下载redis镜像,版本是3.0.7,如果不带:和3.0.7则默认下载最新版本

  • docker rm 容器名/容器ID 删除指定的容器

  • docker rmi 镜像名/ID 删除指定镜像

  • docker stop $(docker ps -a -q) 停止所有容器

  • docker rm $(docker ps -a -q) 慎用!删除所有停止运行的容器

  • docker run 容器名 env 等于:查看指定容器的环境变量

  • docker images -viz | dot -T png -o docker.png 生成容器依赖关系图

  • docker run -it 容器名

  • docker run <=> 先docker create 再 docker start -it表示后台服务挂起

  • docker stop 容器ID 停止指定的容器

  • docker start 容器ID 启动指定容器

  • docker exec -it 容器ID /bin/bash 进入指定的容器的命令

创建容器

  •   docker run --name container-name -d image-name
    
      运行一个image-name镜像的一个实例,名为container-name
    
  •   docker run -d -p [本机端口]:[docker服务器端口] --name container-name image-name
      启动容器时,指定主机与容器的IP映射关系
    
  •   docker logs firstmysql
      查看容器firstmysql的日志
    
  •   docker run --name firstmysql -p 3306:13306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
      启动mysql的镜像,生成一个容器,3306是本地端口,13306是容器中的端口,两者可一样,123456是mysql的root密码,latest表示mysql镜像的版本号,latest表示最新版本。
    
  •   docker run -p 6379:6379 -v $PWD/data:/data  -d redis redis-server --appendonly yes
      启动redis的镜像,生成容器并指定端口,$PWD/data:/data将主机中当前目录下的data挂载到容器的/data	,redis redis-server --appendonly yes 在容器执行redis-server启动命令,并打开redis持久化配置
    

6、常见问题

6.1 连不上docker官方仓库

国外网络有时访问比较慢,可以切到国内镜像仓库。

6.2 启动mysql容器后,使用客户端连不上,报ERROR 2059 (HY000)

ERROR 2059 (HY000): Authentication plugin ‘caching_sha2_password’ cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

原因:指定了加密方式则可能在客户端连接时有问题

解决方案:

1.进入mysql容器

docker exec -it hello-mysql /bin/bash

2.进入mysql

mysql -uroot -p123456

3.修改密码

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

或:

update mysql.user set password=PASSWORD("pwd") where User='root';

报错:ERROR 1045 (28000): Access denied for user ‘root’@‘172.17.0.1’ (using password: NO)

原因:主机没有访问容器数据库的权限

方法:

use mysql;

update user u set u.host = '%' where u.user = 'root' limit 1;

flush privileges;

如果客户端无法telnet容器,则需要关闭容器的防火墙
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值