Linux(CentOS)环境下如何使用Docker容器

如存在问题 或有更好建议 请联系 作者QQ: 2940500

Docker的安装使用 并不难 之前 就会的  但是也是很久没有用过 最近回忆起来发现好多地方都已经记得不是很清楚 模模糊糊  整理这个笔记也是 加深印象,重新巩固一下  

本文是一些个人的学习总结和粗浅理解 如有错误或描述模糊的地方欢迎指正或指出

 本文从在Windows环境使用virtualbox安装CentoOS虚拟机开始

===============================正文开始=============================

 

文中使用到的一些工具:

链接:https://pan.baidu.com/s/1S9Se5z8bqd-2ixjLpUK9EA 
提取码:stn3 
 

 

1. Docker是什么?

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化 ,简单来说就是虚拟机  但是又和虚拟机有很大的不同 

1.虚拟机是在宿主机的基础上虚拟出自己的一套硬件信息,而Docker使用的还是原宿主机的硬件信息,对进程进行隔离,封装成容器 (比较绕,有更好的解释的小伙伴请回复一下)

2.虚拟机占用资源多,运行效率低 ,Docker占用资源少 效率高

2. 它能帮我们做什么?

在开发过程中 我们一般都是把写好的代码打包然后交给 运维人员来进行项目的部署 

开发人员     -----war包(jar包)------->  运维人员  -------war包(jar包)----->  部署到服务器

但是! 

 经常会存在(时有发生) 项目在开发人员这里是可以正常运行 没有异常问题的, 但是当运维人员部署到服务器后 就会出现异常或其他不应该出现的问题,

在开发人员没有给错包 运维人员没有变动包的情况下 出现这个问题的原因就很显然: 开发环境 \ 生产环境的不同导致的(如果环境也一样 还是出现问题 建议以下步骤  关机 --> 拔电源 --> 拿出锤子 --> ...)

那么怎么统一开发环境和生产环境的不同呢?

1. 将开发环境的所有版本信息(JDK,Mysql,Tomcat ,操作系统,软件信息,甚至是配置,等等等)告诉运维人员 然后由运维人员 来对所有服务器进行一一配置 (如果集群环境的话那就不敢想象工作量)

2. 将生产环境版本信息告诉开发人员 由开发人员来配置自己的开发环境 

但是这两种方式 好像都不怎么和谐 

于是 Docker 出现了 

开发人员可以将自己开发环境 进行打包成一个镜像, 然后发布到Docker仓库   运维人员 通过Docker运行镜像就可以获得和开发人员相同的软件环境 从而避免环境问题导致的错误异常

Docker可以实现  ''一次构建 处处运行'' 

3. Docker如何使用 / 要求?

在Windows上使用Linux 可以使用Oracle 提供的免费的虚拟机 VirtualBox( 直接Windows环境也可以安装Docker )

CentOS操作系统下载:https://www.centos.org/download/

Docker 中文官网:https://www.docker-cn.com

文档地址:https://docs.docker-cn.com/

(一般Docker CE版(社区版)就能正常的满足需求)  专业版和付费版差别不大

Docker 支持的操作系统:

Linux(CentOS)环境下如何使用Docker容器_第1张图片

 要求:

拿CentOS来说:

Docker CE版 在CentOS 的操作系统要求是 必须是64位操作系统  Docker对不同系统要求不同 可以再上边的官网了解一下

常用命令:

cat /proc/cpuinfo    # 查看cpu信息
cat /proc/meminfo    # 查看内存信息
uname -r             # 查看内核信息,Docker要求CentOS必须是64位,且内核是3.10及以上
sudo reboot          # 重启,sudo表示以管理员root身份执行
sudo halt            # 关机

 

开始入门:

我是使用的windows系统然后在本系统上装了一个Linux的虚拟机 

 开始:

1. 下载VirtualBox

官网地址:https://www.virtualbox.org/

我使用的是VirtualBox Windows 5.2.20版本 

安装步骤略过无脑下一步即可无特殊注意的地方

下载成功后打开:

Linux(CentOS)环境下如何使用Docker容器_第2张图片

2. 导入虚拟机 (也可以自己创建一个虚拟机)这里我是导入的虚拟机镜像文件  

 Linux(CentOS)环境下如何使用Docker容器_第3张图片

 

选择镜像文件 

 

Linux(CentOS)环境下如何使用Docker容器_第4张图片

 

下边这两步很重要!!  上次自己搞没设置对 以为哪里出现问题 又重新装了一遍 VirtualBox 然后又各种清理注册表 自己学没人带 就这样只能慢慢自己摸索  写这篇文章的目的也是为了让大家节省一些不需要的时间浪费  ()

如果自己创建的主机  最后在主机里 使用 ip addr 命令 不给显示192.xx.xx.xx 这样的端口 就退出虚拟机重新进一下  再使用 ip addr命令查看 是否被分配了 ip  如果还没有!!!  就使用我给的CentoOS系统文件吧 

 

要让其重新初始化网卡不然会导致虚拟机无法外部访问  无法联网的问题

 

 Linux(CentOS)环境下如何使用Docker容器_第5张图片

 

( 如果是使用的我给的 CentoOS系统文件  导入后就直接打开然后 会弹出一个让你修改网络的窗口  然后修改就行了)

 

Linux(CentOS)环境下如何使用Docker容器_第6张图片

 

 安装好后进入系统:

Linux(CentOS)环境下如何使用Docker容器_第7张图片

 

使用 ip addr命令查看网络环境 

Linux(CentOS)环境下如何使用Docker容器_第8张图片

 

 2. 使用远程连接工具进行外部链接 方便操作  系统本身的控制台  太难用了   

我这里用的是FinalShell

Linux(CentOS)环境下如何使用Docker容器_第9张图片

Linux(CentOS)环境下如何使用Docker容器_第10张图片

Linux(CentOS)环境下如何使用Docker容器_第11张图片 Linux(CentOS)环境下如何使用Docker容器_第12张图片

 

 

3.安装 Docker-ce版本(社区版): 4步不能少 前三步是准备工作 第四步是才是真正的安装Docker`

# 设置yum源
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加yum源(官方)
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 添加yum源(阿里) 推荐使用这一条 官方的太慢了
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


# 生成缓存 更新yum软件包索引
yum makecache fast

# 安装Docker-CE
yum -y install docker-ce






  使用 docker version命令查看版本 

 Linux(CentOS)环境下如何使用Docker容器_第13张图片

 5.  启动:

        使用 systemctl start docker 命令启动docker

 

6.  使用  docker run hello-world 测试是否可以正常运行 

 

 Linux(CentOS)环境下如何使用Docker容器_第14张图片

 

 

 7 常用Docker常用命令

docker version # 查看版本
systemctl start docker # 启动
systemctl stop docker # 停止
systemctl status docker # 查看状态
systemctl restart docker  # 重启
systemctl enable docker  # 设置开机自动启动
# 验证,运行hello-world
docker run hello-world  # 下载hello-world镜像并运行



 7.1 输入`docker`可以查看Docker全部的命令用法,输入`docker COMMAND --help`查看指定命令的详细用法 

 Linux(CentOS)环境下如何使用Docker容器_第15张图片

 

8.配置自己的Docker镜像加速

(1).登陆阿里云开发者平台

http://dev.aliyun.com

(2). 查看专属加速地址

收藏之后就会在左侧导航栏展示方便下次进入查看

Linux(CentOS)环境下如何使用Docker容器_第16张图片

 

 (3)  这一步重要: 进入服务后 选则你的操作系统 阿里云会自动为你生成 属于你的  该系统的dos命令  直接复制到控制台回车 就行了   

 

Linux(CentOS)环境下如何使用Docker容器_第17张图片

 

 9. docker常用操作

操作 命令 说明
查找 docker search 关键字 可以在Docker Hub网站查看镜像的详细信息,如镜像的tag标签
抽取 docker pull 镜像名:tag :tag表示软件的版本,如果不指定默认是latest
列表 docker images 查看所有本地镜像
获取元信息 docker inspect 镜像id 获取镜像的元信息,详细信息
删除 docker rmi -f 镜像id或镜像名:tag 删除指定的本地镜像,-f表示强制删除

 例:比如我要拉取mysql 5.6版本

 

 Linux(CentOS)环境下如何使用Docker容器_第18张图片

Linux(CentOS)环境下如何使用Docker容器_第19张图片

 

 不使用 (docker search 关键字) 命令 也可以在https://hub.docker.com/search 来搜索所需要的docker镜像

 

10.容器操作

操作 命令 说明
运行 docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像id或镜像名称:tag --name 指定容器名,名称自定义,如果不指定会自动命名; -i 以交互模式运行,即以交互模式运行容器;-t 分配一个伪终端,即命令行,通常组合使用-it ;-p 指定端口映射,将主机端口映射到容器内的端口;-d 表示后台运行,即守护式运行容器;-v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读 
列表 docker ps -a -q 查看正在运行的容器,-a表示显示所有容器,-q表示只显示容器id
启动 docker start 容器id或容器名称 启动容器
停止 docker stop 容器id或容器名称 停止正在运行的容器
删除 docker rm -f 容器id或容器名称 删除容器,-f表示强制删除
日志 docker logs 容器id或容器名称 获取容器的日志
在容器中执行 docker exec -it 容器id或容器名称 /bin/bash 进入正在运行的容器中并开启一个交互模式的终端,可以在容器中执行操作
拷贝文件 docker cp 主机中的文件路径 容器id或容器名称:容器路径;docker cp 容器id或容器名称:容器中的文件路径 主机路径 将文件中的文件拷贝到容器中;将容器中的文件拷贝到主机中
获取元信息 docker inspect 容器id 获取容器的元信息
     

 以tomcat为例:

 1. 拉取tomcat容器

Linux(CentOS)环境下如何使用Docker容器_第20张图片

2.  启动tomcat 

Linux(CentOS)环境下如何使用Docker容器_第21张图片

 

启动成功:

Linux(CentOS)环境下如何使用Docker容器_第22张图片

 

以docker地址进行访问 发现无法访问

Linux(CentOS)环境下如何使用Docker容器_第23张图片

 

 

然后在宿主机地址进行访问: 发现还是无法访问

Linux(CentOS)环境下如何使用Docker容器_第24张图片

 

 这是因为在docker中运行容器(即便只有一个tomcat其实他还是在底层实现了一个CentoOS系统 )需要 我们进行端口映射才能访问 

 停止Tomcat 然后重新启动tomcat

 docker run -p 8888:8080 -d tomcat

(-d 是设置该容器后台运行 )

这里的tomcat是镜像的名字 也可以是id 

然后再通过docker地址进行访问进行访问(网上有很多人是通过宿主机(我是在windows上装的Linux虚拟机 这里的宿主机指的我的windows主机)地址来进行访问) 而我是通过宿主机的ip就是访问不了 要通过 Linux环境的地址来进行访问 (可能是网络环境等等一系列的问题导致吧,出现这个原因有很多,这个不一定别人的一定是对的  也不一定我的一定是对的 应该说两个都是对的 建议在访问时 两个都试一下) 

Linux(CentOS)环境下如何使用Docker容器_第25张图片

 

11.更新镜像

(1)先基于镜像创建一个容器

docker run --name mytomcat -p 8080:8080 -d tomcat

 

(2) 查看镜像ID 

docker ps -a

(3) 编辑镜像

eb3257561d9e  为我的容器id
docker exec -it eb3257561d9e /bin/bash

cd webapps/ROOT

rm -f index.jsp

echo 这是一个Docker Demo  > index.html

exit

 (4) 提交镜像  语法:docker commit -m="描述消息" -a="作者" 容器id或容器名 镜像名:tag

docker commit -m="自定义Tomcat镜像Demo" -a="QSSSYH" eb3257561d9e  qsssyh/tomcat:v1

 看到返回自定义的镜像信息即为创建成功

(5)测试自定义更新的镜像

docker run --name tomcat_v1 -p:8888:8080 -d qsssyh/tomcat:v1

 

(6) 访问(id还是docker的远程连接地址 和上边的不一样是因为这段文字是在公司弄得  网络环境变了  又重新分配了一个静态ip给我):

Linux(CentOS)环境下如何使用Docker容器_第26张图片

 

 12.构建镜像

根据Dockerfile文件来自动构建镜像

Dockerfile是一个包含创建镜像所有命令的文本文件,使用docker build命令可以根据Dockerfile的内容创建镜像

 (1) 在根目录创建 Dockerfile 文件

vi Dockerfile

 

(2) 编辑Dockerfile 文件 文件中以#开头为注释

# 基础镜像
FROM tomcat

# 作者
MAINTAINER qq2940500

# 执行命令
RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp
RUN echo "welcome to tomcat!" > /usr/local/tomcat/webapps/ROOT/index.html

(3) 构建新镜像,语法:docker build -f Dockerfile文件的路径 -t 镜像名:tag 命令执行的上下文

最后的 . 符号是执行上下文的语法 必须要有的

 docker build -f Dockerfile -t qsssyh/tomcat:v2 .

可以看到镜像已经构建完成 

Linux(CentOS)环境下如何使用Docker容器_第27张图片

 

(4)启动 并测试是否启动成功

 

 

13 发布镜像

(1) 登陆阿里云控制台 打开Docker镜像服务

dev.aliyun.com

 (2)创建命名空间和镜像仓库

Linux(CentOS)环境下如何使用Docker容器_第28张图片

 

 

 

Linux(CentOS)环境下如何使用Docker容器_第29张图片

选择为本地仓库 然后创建

 

Linux(CentOS)环境下如何使用Docker容器_第30张图片

 

点击管理可以查看进行操作指示

Linux(CentOS)环境下如何使用Docker容器_第31张图片

 

(3)将镜像推送到阿里云

Linux(CentOS)环境下如何使用Docker容器_第32张图片

 

输入完指令之后 

会让你输入阿里云的镜像仓库管理密码  注意这里的密码不是阿里云登录密码

 

 

 

Linux(CentOS)环境下如何使用Docker容器_第33张图片

Linux(CentOS)环境下如何使用Docker容器_第34张图片

 

(4) 推送镜像到阿里云 [ImageId] 为tomcat 在Docker仓库中的 ID

# 1 将指定镜像归入阿里云的某个仓库中
docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/qsssyh/tomcat:[镜像版本号]
# 例:
docker tag af513fea93fb registry.cn-shanghai.aliyuncs.com/qsssyh/tomcat:v2

# 2 推送到阿里云
docker push registry.cn-shanghai.aliyuncs.com/qsssyh/tomcat:[镜像版本号]
# 例: 这个v2版本号 不一定要和本地一致
docker push registry.cn-shanghai.aliyuncs.com/qsssyh/tomcat:v2

Linux(CentOS)环境下如何使用Docker容器_第35张图片

 可以看到推送完成:

Linux(CentOS)环境下如何使用Docker容器_第36张图片

 

然后到阿里云镜像管理这边就可以搜索到刚刚上传的镜像文件

Linux(CentOS)环境下如何使用Docker容器_第37张图片

 

 有两个是因为 之前执行这个命令生成的 docker tag [ImageId] registry.cn-shanghai.aliyuncs.com/qsssyh/tomcat:[镜像版本号]

 

 

(为了测试 我把原来这些自己创建的颈项全部删除 可以选做) 

(5)关闭运行的主机 如果出现这个异常  可以使用 docker rm -f $(docker ps -aq) 命令删除所有正在运行的容器的命令

 

(6)现在我的主机中只剩下几个官方的镜像Linux(CentOS)环境下如何使用Docker容器_第38张图片

 (7) 加载刚刚我们上传到阿里云的镜像

# pull后的地址 是阿里云生成的镜像地址  可以到阿里云看自己的镜像地址 

docker pull registry.cn-shanghai.aliyuncs.com/qsssyh/tomcat:v2

Linux(CentOS)环境下如何使用Docker容器_第39张图片

Linux(CentOS)环境下如何使用Docker容器_第40张图片

 

(8)启动 

(9)访问 

Linux(CentOS)环境下如何使用Docker容器_第41张图片

 结束

 

Docker命令汇总:

docker version # 查看版本
systemctl start docker # 启动
systemctl stop docker # 停止
systemctl status docker # 查看状态
systemctl restart docker  # 重启
systemctl enable docker  # 设置开机自动启动
# 验证,运行hello-world
docker run hello-world  # 下载hello-world镜像并运行



操作 命令 说明
查找 docker search 关键字 可以在Docker Hub网站查看镜像的详细信息,如镜像的tag标签
抽取 docker pull 镜像名:tag :tag表示软件的版本,如果不指定默认是latest
列表 docker images 查看所有本地镜像
获取元信息 docker inspect 镜像id 获取镜像的元信息,详细信息
删除 docker rmi -f 镜像id或镜像名:tag 删除指定的本地镜像,-f表示强制删除

 

操作 命令 说明
运行 docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像id或镜像名称:tag --name 指定容器名,名称自定义,如果不指定会自动命名; -i 以交互模式运行,即以交互模式运行容器;-t 分配一个伪终端,即命令行,通常组合使用-it ;-p 指定端口映射,将主机端口映射到容器内的端口;-d 表示后台运行,即守护式运行容器;-v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读 
列表 docker ps -a -q 查看正在运行的容器,-a表示显示所有容器,-q表示只显示容器id
启动 docker start 容器id或容器名称 启动容器
停止 docker stop 容器id或容器名称 停止正在运行的容器
删除 docker rm -f 容器id或容器名称 删除容器,-f表示强制删除
日志 docker logs 容器id或容器名称 获取容器的日志
在容器中执行 docker exec -it 容器id或容器名称 /bin/bash 进入正在运行的容器中并开启一个交互模式的终端,可以在容器中执行操作
拷贝文件 docker cp 主机中的文件路径 容器id或容器名称:容器路径;docker cp 容器id或容器名称:容器中的文件路径 主机路径 将文件中的文件拷贝到容器中;将容器中的文件拷贝到主机中
获取元信息 docker inspect 容器id 获取容器的元信息
     

阿里云Docker安装文档:https://yq.aliyun.com/articles/110806

 

 

你可能感兴趣的:(Docker,Docker)