求求你了,用Docker吧
这是一个开始使用 Docker 的 Tutorial
大无语事件发生!大数据课实验课要用到Hadoop,实验指导是在一个Unbuntu虚机上通过安装包安装Hadoop并运行一个词频统计程序,整个实验就是安装环境,做了4h才把环境搭好。因为我不想装虚拟机用centos云服务器的,期间遇到centos没有sudo用户组问题,遇到文件目录结构不一样等等各种问题,在解决这些问题上消磨了大量时间精力,而在解决这些问题的时候却没有实质性的知识提升和效果产出。每每在这个时候我就想,要是有Docker就好了。
Docker 的好处
粗浅的说,Docker 是一个生产效率工具,他最大的应用价值是抹平不同机器,不同系统的差距,所有程序运行在Docker的平台下,就可以做到两件很重要的事:
- 简化开发环境配置
- 方便不同系统(Linux服务器,Mac或者Windows开发机),不同环境(生产环境,预发环境和开发环境)的程序部署迁移
1. 安装 Docker
因为在不同环境中安装有不同的方式,Docker 官网的指引很好,所以在这里给出安装方式的文档链接和在Centos下安装的流程。
正常情况下, 只需要配置docker源+ 安装最新版两步, 下面给出卸载老版本, 安装指定版本的方法进行拓展学习。
其他系统可以参考官网
https://docs.docker.com/get-docker/
1.1 Centos环境下安装Docker
安装之前可以先查看一下是否已安装docker
docker version # 查看Docker版本, 验证是否已装Docker
如果已安装, 可以尝试卸载Docker
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 卸载老版本Docker /etc/systemd -name '*docker*' -exec rm -f {} ; #清除配置文件和依赖文件 find /etc/systemd -name '*docker*' -exec rm -f {} \; find /lib/systemd -name '*docker*' -exec rm -f {} \;
在下载docker之前, 最好安装yumutils
,并配置yumutils
的yum-config-manager
来设置稳定版的仓库/源, 方便之后的更新
yum install -y yum-utils # 安装 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 配置
安装最新版的docker
sudo yum install docker-ce docker-ce-cli containerd.io
安装好了之后可以和开头一样使用docker version验证是否安装成功
docker version
如果想要安装特定版本可以采用一下方式
-
查看能使用的版本
yum list docker-ce --showduplicates | sort -r
-
安装特定版本
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
2. 认识Docker
装好了docker先跑起来吧
systemctl start docker
这条命令启动docker服务, 类似windows中的服务, 一直运行在后台提供功能, 也就是以一种特殊的, 受保护的模式运行docker本体
关于 systemctl : http://linux.51yip.com/search/systemctl
docker run hello-world
这条命令将会下载hello-world镜像并运行
然后你就会看到一些说明文字
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
2.1 Docker的基本概念
- 镜像(Image):是一个包含有文件系统的面向Docker引擎的只读模板。镜像是一个模板,装了一些系统的配置文件, 我们可以通过镜像建立更多的容器, 容器从镜像启动时,Docker在镜像的上层创建一个可写层, 镜像本身不变。
- 容器(Container):容器是基于镜像创建, 相互隔离的, 可以理解为小型虚拟机,真正的执行单元。
- 仓库(Repository):存放镜像的仓库
- 注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分.
Docker Hub
是Docker公司提供的一个注册服务器(Register)来保存多个仓库
2.2 启动一个装有Centos的Docker容器
2.2.1 下载镜像
在DockerHub查找centos的镜像并拉取centos镜像
docker search ubuntu # 查看 docker pull centos # 拉取
查看docker中的所有镜像
docker images # 查看当前系统中的images信息 # 会获得下面信息 # REPOSITORY TAG IMAGE ID CREATED SIZE # centos latest 0584b3d2cf6d 9 days ago 196.5 MB
2.2.2 启动容器
docker run -it centos:latest /bin/bash # 启动一个容器
run运行容器
-it 使用交互模式运行容器并且分配一个伪输入终端
centos:latest 指定启动的容器的镜像
/bin/bash 是启动容器后运行的指令
2.2.3 在Docker的Centos中安装git并保存镜像
git --version # 此时的容器中没有git # bash: git: command not found yum install git # 利用yum安装git git --version # 此时的容器中已经装有git了 # git version 1.8.3.1
退出容器并查看运行中的容器
docker ps -a
将一个容器转化成镜像保存起来
docker commit -m "centos with git" -a "zjeff" 3a2ed26119d3 zjeff/centos:git
查看docker中的镜像
docker images
-m指定说明信息
-a指定用户信息
3a2ed26119d3 代表容器的id
zjeff/centos:git 指定目标镜像的用户名、仓库名和 tag 信息
现在我们可以使用新保存的镜像创建一个包含git的centos容器
docker run -it zjeff/centos:git /bin/bash
2.3 停止容器和删除镜像
现在把之前下载的hello-world删了
删除镜像之前要停止所有基于镜像的容器
查看运行中的容器
docker ps -a
停止这些容器
docker rm 9f069
然后查看运行中的容器, 没有对应镜像的容器就可以删除镜像
查看镜像
docker images
删除镜像
docekr rmi d1165
3. 利用Dockerfile创建镜像
Dockerfile是一种配置文件, 可以看作批处理脚本, 但是是以一种配置化的形式进行编写
官方说明 https://docs.docker.com/engine/reference/builder/
新建一个Dockerfile
文件( 无后缀 ), 写入下面内容
# 选择一个镜像作为基础 FROM centos:latest # 维护者的信息 MAINTAINER zjeff # 启动镜像后进行的操作 RUN yum update -y RUN yum install -y git # 拷贝本地文件到镜像中 COPY ./* /usr/share/gitdir/ # 前面是容器中的路径, 后面是本地路径
使用Dockerfile新建一个镜像
docker build -t="zjeff/centos:gitdir" .
t用来指定新镜像的用户信息、tag等
最后的点表示在当前目录寻找Dockerfile
构建完成之后,可以使用docker images命令查看
如果提示不是root用户可以使用这条命令进入容器
docker exec -it --user root <container id> /bin/bash
如果你忘了加-y 可能会提示你输入yes 提示会停止构建镜像的过程
还有的时候不能使用-y
如果是安装脚本的场合 比如我们用sh Anaconda3-4.4.0-Linux-x86_64.sh来安装anaconda的时候,”烦人”的anaconda会问四个问题,我的回答顺序分别是Enter,yes,Enter,yes。于是你可以这样写:
RUN sh -c '/bin/echo -e "\nyes\nyes" | sh Anaconda3-4.4.0-Linux-x86_64.sh'
4. 镜像的文件备份和加载
docker save -o centos.tar zjeff/centos:git # 保存镜像, -o也可以是--output docker load -i centos.tar # 加载镜像, -i也可以是--input
5. Docker的 常用操作
run可以运行一个镜像, 创建一个容器 ,之前已经用过了
现在补充一下后台运行和日志的用法
docker run -d xxxx
这样就可以后台运行一个容器
后台启动一个容器后,如果想进入到这个容器,可以使用attach命令:
docker attach container_name/container_id
删除
docker rm container_name/container_id
启动, 停止 , 重启容器
docker start container_name/container_id docker stop container_name/container_id docker restart container_name/container_id
6. 使用DockerHub保存你的镜像
- 注册一个DockerHub账号 , https://hub.docker.com/
- 登录
docker login # Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. # Username: zjeff # Password: # Login Succeeded
- 推送
推送的时候, 要把用户名和登录名一致
docker push zjeff/centos:git # 成功推送 docker push xxx/centos:git # 失败 # The push refers to a repository [docker.io/xxx/centos] # unauthorized: authentication required
- pull 镜像
docker pull zjeff/centos:git
7. 拓展阅读
深入原理 https://zhuanlan.zhihu.com/p/96858321
减小你的镜像体积 https://zhuanlan.zhihu.com/p/115845957
docker 常用操作总结 https://www.docker.org.cn/dockerppt/106.html
Keep curious, keep learning
【Jeff 在写代码】有关代码的一切的一切

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
技术分享| 音视频多频道使用的正确姿势
为方便用户同时加入多个频道,接收多个频道的音视频流,anyRTC 从底层架构给予支持多频道管理,且频道数量无限制,跟随我一起探讨多频道的奥秘吧~ 在跟踪客户需求时,总能听到客户说单个频道支持的人数太少了;我想加入一个频道后不退出的情况下,加入其他频道听取下他们的内容;我想同时进多个频道进行监听;我想在大班课上课的同时,给小组分组上课;对讲;分屏监控...这些需求 anyRTC 统统可以满足了~ 多频道架构 方案介绍 每个用户可以进入多个频道,且频道数量不限制,但只能在一个频道中发布音视频流,anyRTC 的回调中都会带有频道标识,开发者只需要做好本地管理即可。 实现方法 SDK 提供 ARtcChannel 类和 ARtcChannelDelegate 类实现多频道控制。你可以多次调用 createRtcChannel,通过不同的 channelId 创建多个 ARtcChannel 对象(对应多个频道),然后分别调用 ARtcChannel 中的 joinChannelByToken 方法加入对应的频道。 实现多频道功能的主要步骤如下: 调用 sharedEngineWithAppI...
- 下一篇
阿里云发布全新开源操作系统“龙蜥”
10 月 20 日,2021 云栖大会上,阿里云发布全新操作系统“龙蜥”并宣布开源。同时,阿里达摩院操作系统实验室也宣告成立。 龙蜥操作系统定位于服务器端,支持 x86、ARM 等多种芯片架构和计算场景,兼容 CentOS 生态,支持一键迁移,并提供全栈国密能力。 阿里云在大会上透露,龙蜥操作系统已经在阿里巴巴内部打磨 10 年,有效支撑了历年天猫双11,性能和稳定性都经受住了严苛的考验。此外还针对云原生应用开发做了多重优化。 据悉,龙蜥操作系统完全开源,通过开源社区和操作系统厂商等形式提供服务。未来,阿里云计划为龙蜥投入 20 亿专项资金,并联合 100 家生态合作伙伴推动生态建设,提供至少十年技术支持。 根据开源中国之前的报道,龙蜥最新的稳定版是 7 月份发布的 Anolis OS 8.4,发布内容包括ISO、虚拟机镜像和 repo 源。 1、ISO 列表 名称 描述 AnolisOS-8.4-x86_64-dvd.iso x86_64架构的安装 ISO AnolisOS-8.4-aarch64-dvd.iso aarch64架构的安装 ISO AnolisOS-8.4-src-d...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范