失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Docker 之 基础篇(安装 卸载 阿里云镜像加速 常用命令 发布 应用安装)

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

时间:2018-12-06 13:13:19

相关推荐

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

前言

这一章开始,我们就开始记录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、去哪下

官网

Docker Hub官网: /

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

二、安装

1、卸载与安装

因为部分朋友可能下载安装过docker,一般咱们先卸载干净,再来安装。

官网是有步骤的,可以根据官网的来:/engine/install/centos/。

不过有个大坑,需要注意,后续内容会有说明。

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

删除旧版本

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

yum安装gcc相关

需要gcc的环境,这个很多小伙伴都有,就可以跳过。

yum -y install gccyum -y install gcc-c++

安装需要的软件包

yum -y install yum-utils

设置stable镜像仓库(坑!!!)

这么设置镜像仓库的地址是不对的,他是从官网下载,我们在国内很可能是下不下来的。容易出现Error 12和Error 14的错误。

我们需要配置自己的地址,比如设置阿里云仓库。如下。

yum-config-manager --add-repo /docker-ce/linux/centos/docker-ce.repo

更新yum软件包索引

yum makecache fast

安装DOCKER CE

yum -y install docker-ce docker-ce-cli containerd.io

启动docker

这一步没有报错就对咯,也可以查看一下进程看看。

systemctl start docker

测试docker是否成功安装

# 查看docker版本docker version# 运行hello-worlddocker run hello-world

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

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

卸载 Docker

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

2、阿里云镜像加速

1)首先登录阿里云:/ntms/act/kubernetes.html

2)点击控制台 - 选择容器镜像服务 - 获取加速器地址

3)使用下方的操作文档,按步骤执行即可。

至此,docker就正式安装完成啦。解下来就是常用命令的说明。

三、常用命令

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

1、帮助类命令

# 启动dockersystemctl start docker# 停止dockersystemctl stop docker# 重启dockersystem restart docker# 查看docker状态systemctl status docker# 开机启动systemctl enable docker# 查看docker概要信息docker info# 查看docker总体帮助文档docker --help# 查看docker命令帮助文档,比如docker run --helpdocker 命令 --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: 指定端口映射,小写Pdocker 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 可以合并写 -aqdocker rm [OPTIONS] $(docker ps -a -q)docker ps -a -q | xargs docker rm# 查看容器日志docker logs 容器ID/容器名# 查看容器内运行的进程docker top 容器ID/容器名# 查看容器内部细节docker inspect 容器ID/容器名# 进入正在运行的容器并以命令行交互# bashShell 可为/bin/bashdocker exec -it 容器ID/容器名 bashShell# 重新进入,不推荐使用docker attach 容器ID/容器名# 从容器内拷贝文件到主机上# 例:docker cp 3ba05078c5d5:/home/a.txt /homedocker cp 容器ID:容器内路径 目的主机路径# export 导出容器的内容留作为一个tar归档文件[对应import命令]# 例:docker export 3ba05078c5d5 > /home/aaa.tardocker 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.0cat 文件名.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、发布到阿里云

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

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

请根据实际镜像信息替换示例中的[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."],"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:Tagdocker 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文件下新建文件f,**内容如下

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

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

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

SHOW VARIABLES LIKE 'character%'

2、Tomcat的安装

docker pull tomcatdocker 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基础篇结束,后续会继续记录高级部分!欢迎关注。

参考

学习地址:

/video/BV1gr4y1U7CY

思维导图(需要使用思维导图的软件打开):

链接:/s/1_XuF4MeeBcNKvcRf23YApg

提取码:ukkj

如果觉得《Docker 之 基础篇(安装 卸载 阿里云镜像加速 常用命令 发布 应用安装)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。