前言

这一章开始,我们就开始记录Docker了,它也是开发中很实用的一项技术,希望通过学习能够有一个初步的了解和掌握,在后续的工作中,可以快速上手,熟练运用,熟能生巧。

一、简介

1、是什么

Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

1.1 与传统虚拟机技术对比

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
Docker容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

2、能干嘛

  • 更快速的应用交付和部署

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

  • 更便捷的升级和扩缩容

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

  • 更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

  • 更高效的计算资源利用

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

3、去哪下

官网:http://www.docker.com
Docker Hub官网: https://hub.docker.com/

这里有两个地址,第一个官网是Docker的官方网站。第二个则是我们镜像仓库的地址。就如同maven仓库,因为其是外国网站,因此访问比较的慢,我们一般都是使用国内的仓库,如阿里云、网易云等。

二、安装

1、卸载与安装

因为部分朋友可能下载安装过docker,一般咱们先卸载干净,再来安装。
官网是有步骤的,可以根据官网的来:https://docs.docker.com/engine/install/centos/。
不过有个大坑,需要注意,后续内容会有说明。

  1. 查看Linux版本是否是CentOS7及以上版本,通过cat /etc/redhat-release查看。

  2. 删除旧版本

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
  1. yum安装gcc相关
    需要gcc的环境,这个很多小伙伴都有,就可以跳过。
yum -y install gcc
yum -y install gcc-c++
  1. 安装需要的软件包
yum -y install yum-utils
  1. 设置stable镜像仓库(坑!!!)
    这么设置镜像仓库的地址是不对的,他是从官网下载,我们在国内很可能是下不下来的。容易出现Error 12和Error 14的错误。

    我们需要配置自己的地址,比如设置阿里云仓库。如下。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  1. 更新yum软件包索引
yum makecache fast
  1. 安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
  1. 启动docker
    这一步没有报错就对咯,也可以查看一下进程看看。
systemctl start docker
  1. 测试docker是否成功安装
# 查看docker版本
docker version
# 运行hello-world
docker run hello-world

出现如下信息就表明安装成功了。

我们也可以通过运行hello world来查看。如果机器上没有hello-world的镜像,就会去仓库里拉取,此时的仓库就是我们配置的阿里云仓库。当现实Hello from Docker就表明安装成功了。

  1. 卸载 Docker
# 关闭docker
systemctl stop docker
# 删除docker相关的组件
yum remove docker-ce docker-ce-cli containerd.io
# 删除docker的容器和镜像(这些上面的步骤无法删除,需要手动删除)
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

2、阿里云镜像加速

1)首先登录阿里云:https://promotion.aliyun.com/ntms/act/kubernetes.html
2)点击控制台 - 选择容器镜像服务 - 获取加速器地址

3)使用下方的操作文档,按步骤执行即可。
至此,docker就正式安装完成啦。解下来就是常用命令的说明。

三、常用命令

常用命令我们从三方面记录,分别是帮助启动类命令、镜像命令、容器命令。

1、帮助类命令

# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启docker
system restart docker
# 查看docker状态
systemctl status docker
# 开机启动
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker总体帮助文档
docker --help
# 查看docker命令帮助文档,比如docker run --help
docker 命令 --help

注意:
执行 systemctl stop docker会出现“Warning: Stopping docker.service, but it can still be activated by: docker.socket”问题,它表示docker关闭了,但是docker.socket仍然存在,此时一旦执行docker相关命令。比如docker ps,docker 又重启了,可通过systemctl status docker查看此时docker状态为active (running),如果不需要这种机制,在执行 systemctl stop docker后再执行systemctl stop docker.socket即可。

2、镜像命令

# 列出本地的镜像
# -a :列出本地所有的镜像(含历史映像层)
# -q :只显示镜像ID。
docker images [OPTIONS]# 查询镜像 如docker search redis
# --limit num   num为限制数,如5、10、20...
docker search  [OPTIONS] 镜像名# 下载镜像
# 可以指定tag、如果不指定则下载latest,即最新版本
docker pull 镜像名[:TAG]# 删除镜像
# -f 强制删除
docker rmi [OPTIONS] 镜像ID/镜像仓库/镜像仓库:Tag# 查看镜像/容器/数据卷所占的空间
docker system df

3、容器命令

# 新建 + 启动容器
# OPTIONS说明(常用):有些是一个减号,有些是两个减号
# --name="容器新名字" 为容器指定一个名称;如果不写系统则随机一个名字
# -d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);# -i:以交互模式运行容器,通常与 -t 同时使用;
# -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;也即启动交互式容器(前台有伪终端,等待交互);# -P: 随机端口映射,大写P
# -P: 指定端口映射,小写P
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]# 列出当前所有正在运行的容器
# -a :列出当前所有正在运行的容器+历史上运行过的
# -l :显示最近创建的容器。
# -n:显示最近n个创建的容器。
# -q :静默模式,只显示容器编号。
docker ps [OPTIONS]# 退出容器
# run进去容器,exit退出,容器停止
exit
# run进去容器,ctrl+p+q退出,容器不停止
ctrl+p+q# 启动已停止运行的容器
docker start 容器ID/容器名
# 停止运行的容器
docker stop  容器ID/容器名
# 重启容器
docker restart 容器ID/容器名
# 强制停止容器
docker kill 容器ID/容器名# 删除已经停止的容器
# 无法删除未停止的容器,可以先停止再删除或者强制删除
docker rm 容器ID/容器名
# 一次删除多个容器
# -f 强制删除
# -a -q 可以合并写 -aq
docker rm [OPTIONS] $(docker ps -a -q)
docker ps -a -q | xargs docker rm# 查看容器日志
docker logs 容器ID/容器名
# 查看容器内运行的进程
docker top 容器ID/容器名
# 查看容器内部细节
docker inspect 容器ID/容器名# 进入正在运行的容器并以命令行交互
# bashShell 可为/bin/bash
docker exec -it 容器ID/容器名 bashShell
# 重新进入,不推荐使用
docker attach 容器ID/容器名
# 从容器内拷贝文件到主机上
# 例:docker cp 3ba05078c5d5:/home/a.txt /home
docker cp 容器ID:容器内路径 目的主机路径
# export 导出容器的内容留作为一个tar归档文件[对应import命令]
# 例:docker export 3ba05078c5d5 > /home/aaa.tar
docker export 容器ID > 文件名.tar
# import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
# 例:cat aaa.tar | docker import - b-images:1.1.1
# 例:cat aaa.tar | docker import - myfiles/a-images:1.1.0
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号

attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。
exec 是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。
推荐大家使用 docker exec 命令,因为退出容器终端,不会导致容器的停止。
一般用-d后台启动的程序,再用exec进入对应容器实例

四、本地镜像发布

0、commit

将容器生成镜像发布到本地。

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
docker commit [OPTIONS] 容器ID [REPOSITORY[:TAG]]

1、发布到阿里云

  1. 访问阿里云开发者平台https://promotion.aliyun.com/ntms/act/kubernetes.html,并登录。
  2. 选择控制台,进入容器镜像服务
  3. 选择个人实例,按要求填写内容,代码源时选择本地仓库
  4. 进入管理界面获得脚本

脚本页面有登录、拉取、推送等脚本,复制粘贴即可。

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。注意:连同[]一起替换!!!

2、发布到私有库

Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。

Docker Registry是官方提供的工具,可以用于构建私有镜像仓库

1)下载并运行镜像Docker Registry

docker run -d -p 5000:5000 -v /zdl/myregistry/:/tmp/registry --privileged=true registry

运行一个带有容器卷存储功能的容器实例,rw为读写都行,ro为read only,不写默认rw
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
查看是否挂载成功
docker inspect 容器ID

数据卷:就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File
System提供一些用于持续存储共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
卷的继承docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu

如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限

2) 查看本地库现有镜像

curl -XGET http://192.168.61.111:5000/v2/_catalog

可以发现刚刚创建时是没有任何镜像的。

3)创建一个镜像

略。上文有描述

4)将新镜像修改符合私服规范的Tag

Host为Registry所在服务器的IP
Port为Registry所在服务器的端口
Repository为镜像仓库名
Tag为镜像版本标签

docker tag 镜像:Tag Host:Port/Repository:Tag

例如:docker tag myubt_tools:1.1 192.168.61.111:5000/myubt_tools:1.1

5)修改配置文件使之支持http

vim /etc/docker/daemon.json
{"registry-mirrors": ["https://fo6f0ahm.mirror.aliyuncs.com"],"insecure-registries": ["192.168.61.111:5000"]
}

修改配置文件后一定要重新启动docker!
修改配置文件后一定要重新启动docker!
修改配置文件后一定要重新启动docker!

6)将创建的镜像发布到本地库

docker push Host:Port/Repository:Tag

例如:docker push 192.168.61.111:5000/myubt_tools:1.1

7)pull到本地并运行

docker pull Host:Port/Repository:Tag
docker run -it [ImageId] /bin/bash

例如:docker pull 192.168.61.111:5000/myubt_tools:1.1
使用实际镜像ID替换[ImageId]

五、docker简单安装应用

1、MySQL的安装(MySQL 5.7)

哪一个版本无所谓,此处记录以MySQL 5.7为例。
运行MySQL。
端口3306、数据卷、root密码123456、后台启动

docker run -d -p 3306:3306 --privileged=true -v /zdl/mysql/log:/var/log/mysql -v /zdl/mysql/data:/var/lib/mysql -v /zdl/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7

**在conf文件下新建文件my.cnf,**内容如下

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

如果出现了初始化问题,可以试一试将MYSQLROOTPASSWORD改为MYSQL_ROOT_PASSWORD,我就是因为这个弄好好久。。。人麻了

重新启动mysql容器实例再重新进入并查看字符编码

SHOW VARIABLES LIKE 'character%'

2、Tomcat的安装

docker pull tomcat
docker run -it -p 8080:8080 tomcat

新版启动后,访问首页可能无法出现tom猫,因为新版的webapps里没有任何文件,它将文件放在了webapps.dist,可以把webapps.dist目录换成webapps再重启tomcat就可以访问了。
可以使用这个版本的tomcat,就无需修改了。
docker pull billygoo/tomcat8-jdk8

3、Redis的安装(Redis 6.0.16)

此处记录以Redis 6.0.16为例。

先拉取镜像docker pull redis:6.0.16
新建文件夹mkdir -p /zdl/redis,在该目录下放入一个redis.conf默认文件,文件来源自行解决。
修改配置文件

允许redis外地连接 必须 注释掉 # bind 127.0.0.1
daemonize no 将daemonize yes注释起来或者daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败

运行redis测试是否成功。使用数据卷。使用我们修改后的文件。

docker run -d -p 6379:6379 --name myredis --privileged=true -v /zdl/redis/redis.conf:/etc/redis/redis.conf -v /zdl/redis/data:/data  redis:6.0.8 redis-server /etc/redis/redis.conf

至此。Docker基础篇结束,后续会继续记录高级部分!欢迎关注。

参考

学习地址:
https://www.bilibili.com/video/BV1gr4y1U7CY
思维导图(需要使用思维导图的软件打开):
链接:https://pan.baidu.com/s/1_XuF4MeeBcNKvcRf23YApg
提取码:ukkj

Docker 之 基础篇(安装、卸载、阿里云镜像加速、常用命令、发布、应用安装)相关推荐

  1. 关于adb指令安装卸载apk的几个常用命令

    关于adb指令安装卸载apk的几个常用命令 新人自述 adb常用命令 adb remount adb shell adb install xx.apk adb uninstall 包名 adb reb ...

  2. Docker Hub的使用以及配置阿里云镜像加速

    Docker Hub是一个由Docker公司负责维护的公共注册中心,它包含了超过15,000个可用来下载和构建容器的镜像,并且还提供认证.工作组结构.工作流工具(比如webhooks).构建触发器以及 ...

  3. centos安装docker详细步骤,如何配置阿里云镜像加速

    安装epel yum install -y epel-release 2. 安装docker-io yum install -y docker-io 3. 启动docker服务 service doc ...

  4. 第133天学习打卡(Docker 初识Docker Docker的基本组成 安装docker 阿里云镜像加速 Docker常用命令)

    Docker学习 Docker概述 官方地址:Empowering App Development for Developers | Docker Docker的思想来自于集装箱! 隔离:Docker ...

  5. Docker安装卸载配置阿里云镜像加速超详细步骤

    环境准备 需要会点linux基础 (不会的话看一遍就会了) CentOS 7 (本文操作系统) 使用Xshell或其它软件连接远程服务器进行操作 环境查看 [root@iZwz98goak0taot3 ...

  6. Linux上安装Docker及配置阿里云镜像加速

    Docker安装 Docker的基本组成 镜像(image) Docker 镜像(image)就是一个只读的模板.镜像可以用来创建Docker容器,一个镜像可以创建多个容器.就好比java中的类和对象 ...

  7. Docker安装并配置阿里云镜像加速

    环境 基于Centos7安装Docker. 内核版本: 步骤 先卸载原本的Docker依赖 yum remove docker \docker-client \docker-client-latest ...

  8. ubuntu安装docker详细教程以及配置阿里云镜像加速

    ubuntu环境: Distributor ID: Ubuntu Description:    Ubuntu 16.04.2 LTS Release:        16.04 Codename: ...

  9. 【docker】macOS系统下安装并配置阿里云镜像加速

    [docker]macOS系统下安装并配置阿里云镜像加速 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 参考安装链接 文章目录 [docker]macOS系统下安装并配置阿里云 ...

最新文章

  1. 《中国大数据产业白皮书及百强榜单》:一览中国大数据产业发展全局
  2. UVa 1025 A Spy in the Metro
  3. Hive 任务卡在 map = 0%, reduce = 0%
  4. python 字符串交集_Python序列--集合(set)
  5. 清华,北大坐实亚洲大学Top2,泰晤士2020亚洲大学榜
  6. Shell编程之运算
  7. 萌新接触前端的第三课——JavaScript
  8. Java中的retainAll()函数笔记
  9. resform3.0_ResForm3.0公益版
  10. Macbook pro (m1)突然没有办法按住shift打出大写R
  11. word去除标题前的小黑点
  12. 混合策略改进鲸鱼优化算法-附代码
  13. tumblr_向您的Tumblr博客添加高级主题
  14. ViewportWidth,Width,MeasuredWidth
  15. 忆黄霑(文/林青霞)
  16. Pingouin: 基于pandas和numpy的统计包
  17. 用星号输出一个梯形,如下图所示:(使用嵌套for循环完成)
  18. 读取txt的中文字符出现乱码的解决方法
  19. android 嘶嘶 录音 电流音_教你如何轻松解决拾音器的“电流声”
  20. 山西好点的计算机专科学校排名及分数线,山西专科学校排名及分数线

热门文章

  1. 2023-5-8分享免费代理ip
  2. XXL-JOB注册执行流程
  3. 51单片机读取DS18B20温度传感器
  4. 科技工作者心理健康分析
  5. hooks 使用dva_使用dva框架的总结
  6. 计算机毕设 SSM+Vue周食谱系统 健康食谱推荐系统 营养食谱系统 美食菜谱分享系统Java Vue MySQL数据库 远程调试 代码讲解
  7. 面试官:什么是双亲委派模型?如何打破它?
  8. 游戏内嵌社区服务开放,助力开发者提升玩家互动与留存
  9. React 中的高阶组件及其应用场景
  10. Python逻辑控制