不是什么很好的体验。
本人运维一个,现在服务器上重度使用docker。
然而,问题还是存在很多,因为每个images其实都是别人部署好的小型服务器。那么你使用别人的images问题就来了。各位或多或少使用过别人的电脑的,都有得痛处。文件存放的习惯!!怎么把logs挂载出来,怎么把配置文件保存出来,这都是需要对容器的熟悉程度。
所以,导致每次下载一个images都要去找人家的dockerfile过一遍,其实不亚于自己做一个了。不过好处就是,通过读官方的部署文档,你能更加的了解这个程序的运作。
因些个人电脑不建议使用docker,要么在虚拟机上安装docker,这样不用浪费个人电脑资源,而且使用方便
Docker有什么优势?
1. docker是什么?2. docker跟原有的工具有何区别?3. docker会对服务器端开发/部署带来什么变化?
单纯的Docker是一个非常难理解的东西,它和虚拟机有些类似,但又不等同于虚拟机,它们的原理是不同的。
虚拟机只是对硬件进行虚拟化,基于物理机的硬件虚拟出一套硬件之后,在这个基础上运行一个完整的操作系统,而Docker是虚拟化的容器,容器虚拟化的是操作系统而不是硬件,容器和容器之间共享同一套操作系统资源。
容器的优势是非常明显的:虚拟机将一台服务器变成多台服务器,每一个VM都拥有整套的操作系统、需要占用大量的空间,所以VM启动缓慢系统也会占用很多的硬件资源。代码、依赖的资源打包在一起形成一个容器,容器没有自己的内核,容器内的应用直接运行在系统的内核上,多个容器可以同时运行共享系统内核,但容器之间又以相互独立的进程在运行。所以容器比虚拟机要轻便很多,几乎瞬间就能启动。
如此这般说Docker的概念还是很抽象,举个例子:Ubuntu的系统搭建的项目要部署到CentOS的服务器上,所有依赖的环境(比如:MySQL、Redis等等)都需要重新安装一遍,并按照部署的要求进行配置。使用Docker只需要一条命令就可以达成,需要MySQL只需要安装一个MySQL的镜像,需要Redis只需要安装一个带Redis的镜像,然后启动这些容器就可以。
容器可以用别人制作的,也可以添加一些自己的软件、修改相应的配置文件做一个镜像,通过这个镜像就可以创建出无数个一模一样的容器。Docker和各大开源项目团队一起维护着庞大高质量的官方镜像,我们可以直接使用或者修改定制后再使用。你还无法体会这样的优势所在,比如通过一个Redis镜像,可以轻松的搭建一个集群。容器更多地用来表示软件的标准化单元,无视物理硬件设施之间的差异部署到任意位置、任意平台,所以容器又被誉为代码集装箱装卸工。
如此这般就不会再出现诸如“这段代码在我机器上运行没有问题”之类的,可以轻松的将在一个平台上运行的应用,迅速的迁移到另一个平台,而不用考虑平台和运行环境的兼容性。
Docker包含了镜像(Image)、容器(Container)、仓库(Repository)
Docker的镜像相当于Linux的root文件系统,它提供容器运行所需要的软件、资源、配置参数、库文件等等。容器才是运行的实体,镜像是经过一层层构建定义的,里面不包含任何动态数据,构建完之后就不会再改变,而容器可以创建、启动、停止、暂停、删除。仓库是用来集中存放镜像文件,这样就便于服务器进行统一的管理。
Docker码头装卸工的形象已经深入人心
Docker将开源仓库的镜像拉到本地,镜像运行后在本地运行形成容器,这个就是Docker码头装卸工的形象,已经深入人心。它赋予了软件独立性,避免了开发、预演、环境之间的差异。Docker这几年这么火爆是不无道理的,好用所以它就火了。
以上个人浅见,欢迎批评指正。
认同我的看法,请点个赞再走,感谢!
喜欢我的,请关注我,再次感谢!
你用docker做过什么好玩或者有逼格的事情?
使用 Docker 搭建 Jenkins+python3+seleniumhelium 项目
项目背景
用 python3 在本地写了一个项目,这个项目采用 helium+selenium+chrome 进行界面操作,代码放在 gitee 上托管。现在基本功能已经实现,想在 Linux 服务器上部署项目代码,实现自动构建。
- 自动构建解决方案
- 自动构建工具选型:jenkins
- 中间件选型:docker
- 代码运行环境:python3
- 脚本运行工具:Chrome 浏览器、chromedriver、helium 库
Ⅰ、安装 docker
- Linux 系统中安装 docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
- docker 镜像国内加速
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
# 重启服务
systemctl daemon-reload
systemctl restart docker
Ⅱ、安装 jenkins
- 在 Linux 上任意路径,创建一个用于存放 Jenkins 文件的文件夹 "jenkins_py"
mkdir jenkins_py docker run -itd --name=jenkins_py -p 8989:8080 -p 50001:50000 -v $PWD:/var/jenkins_home --privileged=true -u root jenkins/jenkins
- 访问 jenkins:http://ip:8989
- 出现输入密码页面时,获取密码:
- 方法 1:
# 进入容器
docker exec -it -u root jenkins_py /bin/bash
# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
- 方法 2:
# 在当前宿主linux机器上,进入前面自己创建的jenkins_py文件夹
cd secrets
cat initialAdminPassword
复制密码,填入 Web 页面的密码框,在选择安装插件页面,点击安装推荐插件,等待插件自动安装
Ⅲ、容器安装必要软件
- 进入容器
docker exec -it -u root jenkins_py /bin/bash
- 安装更新
# 安装更新
apt-get update
# 查看系统
cat /etc/issue
# 此时容器默认的系统为 debain 9
# debain默认的软件源非常慢, 可以更换为国内阿里源
# 安装vim
apt-get install -y vim
apt-get install -y wget
# 更换源为阿里源
vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
# 更新系统
apt-get update
# 安装libssl-dev
apt-get install libssl-dev
Ⅳ、配置 Web 自动化环境
- 下载浏览器
- 百度搜索"chrome for linux", 下载适合 debain 版本的 Chrome 浏览器
- 把下载的文件上传到 Linux 机器
- 下载浏览器驱动
- 下载 Chrome 浏览器 Linux 对应版本的驱动
- 把下载的文件上传到 Linux 机器
- Jenkins 容器中,安装 Chrome 浏览器
# 把chrome文件,复制到上面创建的 jenkins_py 文件夹
cp google-chrome-stable_current_amd64_85.0.4183.102.deb ./jenkins_py/
# 进入容器
docker exec -it -u root jenkins_py /bin/bash
cd /var/jenkins_home
chmod +x google-chrome-stable_current_amd64_85.0.4183.102.deb
dpkg -i google-chrome-stable_current_amd64_85.0.4183.102.deb
- 配置浏览器驱动
# 解压驱动zip包
unzip chromedriver_linux64.zip
# 拷贝到 jenkins_py文件夹
cp chromedriver ./jenkins_py/
# 进入容器
docker exec -it -u root jenkins_py /bin/bash
cd /var/jenkins_home
chmod +x chromedriver
mv chromedriver /usr/bin/
cp /usr/bin/chromedriver /usr/local/bin/
Ⅴ、安装 python3
- 安装 python3
apt-get install -y python3
- 安装 pip
# 下载pip
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
pip3 install --upgrade --force-reinstall setuptools
- 修改系统默认 python 版本为 python3
cd /usr/bin
ls -l python*
# 查看上面的python3的版本
rm -rf python
ln -s python3.5 pythonpython3.5
# 修改为上面对于的python3版本* 修改pip源
- 修改 pip 源
vim /etc/pip.conf
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple/
Ⅵ、jenkins 配置任务
- 创建任务
- 配置 Git
- 配置构建触发器(可选)
- 配置构建脚本
pip install -r requirements.txt 执行项目根目录中的 requirements.txt 文件,自动安装项目需要的库,这样就不用担心代码引入了新库,而 Jenkins 中不存在,导致报错了。
cp ../../tools.ini $PWD/src/conf 拷贝配置文件。因为 gitee 托管项目时,没有提交 ini 带私密信息的配置文件
python main.py 用 python 执行项目
- 构建
注意: 用 docker+jenkins 来运行 selenium 的项目,是无图形界面的,所以项目中,浏览器必须采用无头模式
# 参考代码
self.options = ChromeOptions()
self.options.add_argument('--headless')
self.options.add_argument('--no-sandbox')
self.options.add_argument('--disable-gpu')
self.options.add_argument('--disable-dev-shm-usage')
start_chrome(headless=True,options=self.options)
好了,项目构建成功。整个构建步骤、方法,你学会了吗?