资讯专栏INFORMATION COLUMN

Docker入门(一)

zebrayoung / 1971人阅读

摘要:作者麦冬白鲸鱼是什么入门教程容器是与系统其他部分隔离开的一系列进程,运行这些进程所需的所有文件都由另一个镜像提供,从开发到测试再到生产的整个过程中,容器都具有可移植性和一致性。快速容器的启动和创建无需启动,可以实现秒级甚至毫秒级的启动。

作者: 麦冬 白鲸鱼
docker 是什么

Docker 入门教程

Docker容器是与系统其他部分隔离开的一系列进程,运行这些进程所需的所有文件都由另一个镜像提供,从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性。相对于依赖重复传统测试环境的开发渠道,容器的运行速度要快得多,并且支持在多种主流云平台(PaaS)和本地系统上部署。Docker容器很好地解决了“开发环境能正常跑,一上线就各种崩”的尴尬。

轻量:容器是进程级的资源隔离,而虚拟机是操作系统级的资源隔离,所以Docker容器相对于虚拟机来说可以节省更多的资源开销,因为Docker容器不再需要GuestOS这一层操作系统了。

快速:容器的启动和创建无需启动GuestOS,可以实现秒级甚至毫秒级的启动。

可移植性:Docker容器技术是将应用及所依赖的库和运行时的环境技术改造包成容器镜像,可以在不同的平台运行。

自动化:容器生态中的容器编排工作(如:Kubernetes)可帮助我们实现容器的自动化管理。

docker三大核心



常见应用场景

对应用进行自动打包和部署

创建轻量、私有的PAAS环境

自动化测试和持续整合与部署

部署和扩展web应用、数据库和后端服务

基础部分 安装

看Docker操作手册
写的很详细

二进制安装 一般安装方法

这里说下二进制安装,按照官网方式Install static binaries

安装docker在Centos基本上就是yuminstall即可的一件事情(在ubuntu也是apt-get很容易安装),但是在实际环境中,可能遇到企业内网之内无法连接,或者安全合规审查等问题,加之下载增加了安装时间,因此二进制方式安装变成了一种实际的需要。下面是官网的安装方式

有些时候会在sudo docker &时候出现错误
可以执行以下下面命令再试。

rm -rf /var/lib/docker 
脚本傻瓜式安装

这里提供写好的脚本,可以把脚本和下载的二进制文件放在同一目录下,然后运行sh install-docker.sh

项目 下载地址
二进制方式安装docker脚本 http://osgp88fat.bkt.clouddn....
二进制的docker安装文件 https://download.docker.com/l...
程序是否正常
sudo docker info

运行容器

docker run命令提供了Docker容器的创建到启动的功能


如果要在命令行下创建一个我们能与之进行交互的容器,而不是一个运行后台服务的容器,则-i -t这两个参数是必不可少的基本参数。

apt-get update && apt-get install vim  //在容器中安装vim
exit //  推出容器,返回到Ubuntu容器的宿主机命令行提示符中

查看当前系统中容器列表
sudo docker ps -a 


加上-a 会显示正在运行的 和已经停止的所有容器

容器命名

一般docker会为创建的容器生成随机名称,生成指定名称用--name

sudo docker run --name jxtreehouse -i -t ubuntu /bin/bash

附着到容器上

像上面那样,docker容器重新启动时候,会沿用docker run 命令的参数来运行,因此我们容器重新启动后会运行一个交互式会话shell。
当然,我们也可以用docker attach命令 重新附着到该容器的会话上

 sudo docker attach jxtreehouse

创建守护式容器

除了交互式运行的容器,我们也可以创建长期运行的容器:守护式容器
特点:

没有交互会话

非常适合运行应用程序和服务

所以,大多数时候我们都需要守护式运行我们的容器

sudo docker run --name jxbooks -d  ubuntu /bin/sh -c "while true;do echo hello jx;sleep 1; done"


从上面运行结果我们可以看出,docker run命令并没有像上一个容器那样将主机的控制台附着到新的shell会话上,仅仅返回一个容器ID而已,我们还是在主机的命令中。

容器内部运行情况

### 查看日志

sudo docker jxbooks
sudo docker logs jxbooks  // 获取守护式容器日志
sudo docker logs -f jxbooks // 跟踪守护式容器的日志(-f 类似 tail -f)
sudo docker logs -ft jxbooks // 跟踪守护式容器的最新日志 (加上时间戳)
查看容器内的进程
 sudo docker top jxbooks
在容器内部运行进程

在Docker3.1之后,我们可以通过docker exec命令在容器内部额外启动新程序。
可以在容器内运行的进程有两种:

后台任务

交互式任务

后台任务例子:

 sudo docker exec -d jxbooks touch /etc/new_config_file

在jxbooks容器中启动一个如打开shell的交互任务:

 sudo docker exec -t -i jxbooks /bin/bash

和交互式容器一样,这里-t -i 标志为我们执行的进程创建TTY并捕捉STDIN。

停止守护式容器
sudo docker stop jxbooks

jxbooks也可用容器的ID来替代(查看id 可用 docker ps -a

自动重启容器
sudo docker run --restart=always --name jxbooks -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1;done"

--restart=always 无论容器的退出代码是什么,docker都会自动重启容器
还可以设置成 on-failure (只有当容器退出代码为非 0 时候 才会自动重启)

--restart=on-failture:5 //重启次数参数
深入容器
sudo docker inspect jxbooks
删除容器
sudo docker rm  容器名或id //注意运行中的docker容器无法删除,必须先docker stop 或者 docker kill 停止容器

删除所有容器

docker rm `docker ps -a -q`
创建镜像

查看这个docker 入门
.gitignore

.git
node_modules
npm-debug.log

Dockerfile

FROM node:8.4
COPY . /app
WORKDIR /app
RUN ["npm", "install"]
EXPOSE 7001/tcp
zk@zk-TM1604:~/data-screen$ docker image build -t data-screen:0.0.1 .
docker image ls

zk@zk-TM1604:~/data-screen$ docker save data-screen:0.0.1 | gzip > data-screen.tar.gz
zk@zk-TM1604:~/data-screen$ scp -r data-screen.tar.gz root@118.24.153.55:/root/



这时候我们项目的根目录下就有了一个docker的镜像压缩文件

导入docker镜像并开发

在合作开发时候,我们拿到一个项目打包好的docker镜像(原开发环境为ubuntu,我们这里拿到镜像后 还用ubuntu做演示,实际开发时候,你可能是在windows 或者centos中拿到这个项目镜像来开发)
比如压缩包名datascreen.tar
这里我用远程服务器演示下:

我们在根目录/data文件夹中建一个docker文件夹,进入文件夹,新建tmp文件夹 ,在docker同级目录下新建 datascreen 文件夹 我们将把项目docker镜像文件映射到这里

导入容器
sudo docker load < ${PATH}/datascreen.tar  //加载docker打包的镜像 到本宿主机   
运行Docker
sudo docker images //获取image ID
sudo docker run -d -it -p 7001:7001 -v /data/docker/tmp/:/tmp/ {image id} /bin/bash

/data/docker/tmp/ 映射到的宿主机上的目录
/tmp/ {image id} /bin/bash 镜像中的目录

启动容器
sudo docker ps  //查看运行中的容器
sudo docker start f1737f42f13b  //f1737f42f13b 是容器id
sudo docker exec -it f1737f42f13b /bin/bash
运行data-screen
cd data-screen/
nohup ./auto-run.sh &


auto-run.sh脚本中的内容,主要是启动mongod 和用node启动入口文件index.js (这个项目是一个nodejs的后台项目)

停止docker 容器

(!危险) 如果是运行在应用上的程序和服务的守护式容器 注意不要随意停止

sudo docker ps
 sudo docker stop 

参考

Docker操作手册
第一本docker书
[Docker — 从入门到实践]()
Docker 入门教程
Docker 微服务教程
基于docker+gunicorn部署sanic项目
vue-cli3 项目从搭建优化到docker部署

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27010.html

相关文章

  • Docker入门)用hello world入门docker

    摘要:初识是什么是一个开源的应用容器引擎,基于语言并遵从协议开源。容器是完全使用沙箱机制,相互之间不会有任何接口更重要的是容器性能开销极低。命令为,如下由此可知,我们新打包的镜像的为。登录账号再输入自己的账号密码即可。 初识Docker Docker是什么?   Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从Apache2.0协议开源。  Docker 可以让开发者打包他们的...

    tolerious 评论0 收藏0
  • 这是docker 入门实践

    摘要:前言其实接触也有一段时间了,但是一直没有做下总结,现在网上关于的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧。实现目标安装探索基本概念及用法环境准备位,内核版本不低于安装以下命令均需在权限下执行。 showImg(https://segmentfault.com/img/remote/1460000017894270?w=538&h=344); 前言 其实接触 do...

    ashe 评论0 收藏0
  • Docker零基础入门指南():Docker介绍

    摘要:原文地址零基础入门指南一介绍简介源代码托管在上,公司开源的一个基于技术之上构建的容器引擎,基于语言并遵从协议开源。通过等实现内核虚拟化技术,并提供容器的资源隔离与安全保障等。 原文地址:Docker零基础入门指南(一):Docker介绍 Docker简介 Docker源代码托管在 GitHub上,Docker 公司开源的一个基于LXC技术之上构建的Container容器引擎,基于Go...

    DevTTL 评论0 收藏0
  • Docker之旅——入门篇()

    摘要:常见问题点击之后提示错误,我们点击浏览选择安装目录的下载镜像很慢,参考提供的加速器文档链接之旅使用搭建私服二其他参考非常详细的学习笔记最佳实践一命令详解超全版本基于打造前端持续集成开发环境 Docker进行感性认知 Docker 最初的2小时(Docker从入门到入门).md 开启Docker之旅 环境: win7, 64位 工具准备: 1. 官网地址: https://get....

    JinB 评论0 收藏0
  • Docker之旅——入门篇()

    摘要:常见问题点击之后提示错误,我们点击浏览选择安装目录的下载镜像很慢,参考提供的加速器文档链接之旅使用搭建私服二其他参考非常详细的学习笔记最佳实践一命令详解超全版本基于打造前端持续集成开发环境 Docker进行感性认知 Docker 最初的2小时(Docker从入门到入门).md 开启Docker之旅 环境: win7, 64位 工具准备: 1. 官网地址: https://get....

    时飞 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<