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 支持的操作系统:

 要求:

拿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版本 

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

下载成功后打开:

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

 

 

选择镜像文件 

 

 

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

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

 

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

 

 

 

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

 

 

 安装好后进入系统:

 

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

 

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

我这里用的是FinalShell

 

 

 

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命令查看版本 

 

 5.  启动:

        使用 systemctl start docker 命令启动docker

 

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

 

 

 

 

 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`查看指定命令的详细用法 

 

 

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

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

http://dev.aliyun.com

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

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

 

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

 

 

 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版本

 

 

 

 不使用 (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容器

2.  启动tomcat 

 

启动成功:

 

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

 

 

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

 

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

 停止Tomcat 然后重新启动tomcat

 docker run -p 8888:8080 -d tomcat

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

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

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

 

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给我):

 

 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 .

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

 

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

 

 

13 发布镜像

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

dev.aliyun.com

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

 

 

 

选择为本地仓库 然后创建

 

 

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

 

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

 

输入完指令之后 

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

 

 

 

 

(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

 可以看到推送完成:

 

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

 

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

 

 

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

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

 

(6)现在我的主机中只剩下几个官方的镜像

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

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

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

 

(8)启动 

(9)访问 

 结束

 

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

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值