Docker是一门很成熟的容器技术,类似虚拟机技术主要用做环境的隔离,方便环境的复制镜像,虚拟机是基于操作系统这一层的,而Docker更加的轻量级,像是“应用”层级的。比如我需要一个MySQL环境、一个Nginx环境、一个netcore运行环境等等。

有两个非常重要的概念要搞明白

镜像Images:做好的环境,存储在仓库,有点像SVN/Git,有点像你做好的一个系统盘,它存的就是环境,比如一个nginx的镜像。

容器Containers:一个镜像在本机上的运行实例就是一个容器,可以运行多个容器。比如我从远端pull一个nginx的镜像,然后在本机运行这个nginx,这就是形成了一个容器。

这两个之间的关系就像类与实例化之后的对象一样。

现在好多软件都提供Docker形式的分发了,镜像的查找可以登录https://hub.docker.com/查找。需要什么环境,直接pull到本机,然后run运行,非常方便,不用在本机安装环境了。可以把自己配置好的环境提交成一个镜像,然后在用的地方直接pull and run, 这样就不用担心环境不一致的问题了,非常方便复制且环境一致。

下面我以CentOS 7.2为例,运行一个nginx的容器。

# 更换源为国内
cd /etc/yun.repos.d
ls
mv CentOS-Base.repo CentOS-Base.repo.backup
wget http://mirrors.163.com/.help/CenOS7-Base-163.repo
yum makecache
yum -y update # 安装 (通过官方sh脚本)
wget https://get.docker.com
mv index.html docker.sh
sh docker.sh
# 当前登录用户
sudo usermod -aG docker root # 启动停止,和普通服务一样
service docker start # 查看信息
docker info
docker version # -------------
# 概念,要特别理解熟悉镜像(images)和容器(container)
# images就像远程服务器SVN上的代码(其实是程序环境,比如centOS,nginx,netcore....),可以拉下来编译运行
# container就是本机运行一个images产生的环境 # 常用命令,不知道的,--help查看 # 镜像操作
docker images
# https://hub.docker.com
docker search xxx
docker pull xxx
docker rmi xxx # 容器操作
docker run xxxxx
docker rm xxx
docker start xxx
docker stop xxx docker attach xxx
docker exec -t -i xxx /bin/bash docker run xxx yum install soft docker cp xxx:/container_path ospath # 进阶 > 提交

docker容器运行后,通常是后台运行的,怎么进入容器查看运行情况呢,有下面几个办法

# 直接在外面查看容器运行的日志
docker logs xxx # 进到容器且显示当前运行的程序的终端
# 退出时按Ctrl+P+Q,一般有点卡,这个界面是只读的,没法交互
docker attach xxxx # 进到容器里,可以bash交互的
docker exec -t -i b2d28b4aa923 /bin/bash

使用docker exec进入容器后,就像ssh进入一个Linux环境一样,完全可以控制系统了,比如查看文件路径,打开一个文件等等。在机器与容器之间copy文件是一个常见的场景,但是,容器里的文件结果是怎么样的,一个文件放在那个路径下怎么知道,这时用docker exe就很方便了。比如我运行一个nginx的容器,我需要把网站的文件copy进去,但我不知道应该容器里网站文件应该放在什么地方,可以这样做。进入容器后,注意看系统提示都变了,然后我就可以查找nginx网站的路径,退出时exit退到机器

# 把一个文件copy到容器nginx网站路径下
docker cp my.html b2d28b4aa923:/user/share/nginx/html/my.html # 也可以反过来copy
docker cp xxx:/user/file /root/file # 容器里的文件路径为 容器ID或名称:容器里的路径

参考:https://yeasy.gitbooks.io/docker_practice/content/container/run.html

Docker入门实践的更多相关文章

  1. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  2. 这是一次 docker 入门实践

    前言 其实接触 docker 也有一段时间了,但是一直没有做下总结,现在网上关于 docker 的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧. 实现目标 安装 docker ce ...

  3. Docker 入门实践

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...

  4. Docker入门实践(三) 基本操作

    Docker安装完毕.我们就能够试着来执行一些命令了.看看docker能够干什么. (一) 创建一个容器 首先.让我们执行一个最简单的容器,hello-world.假设安装没有问题.并执行正确的话,应 ...

  5. 【实战】Docker 入门实战一:ubuntu 和 centos 安装Docker

    Docker是什么 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  6. 微服务 + Docker + Kubernetes 入门实践 目录

    微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...

  7. Docker 入门教程与实践

    title: Docker 入门教程与实践 tags: Docker ---- 在Windows上安装Docker客户端 1.下载Docker TollBox: https://docs.docker ...

  8. 《Docker 入门与实践》 已经出版了~欢迎有须要的朋友关注。

    在云计算时代.开发人员将应用转移到云上已经攻克了硬件管理的问题,然而软件配置和管理相关的问题依旧存在. Docker的出现正好能帮助软件开发人员开阔思路.尝试新的软件管理方法来解决问题. 通过掌握Do ...

  9. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

随机推荐

  1. mybatis中if test 可以使用== != null '' and or 和括号()

    <if test="pd.flag==1 or ((pd.flag==2 or pd.flag==3) and (pd.sfyj==2 or pd.sfyj==3)) or pd.fl ...

  2. 解决java编译错误:编码GBK的不可映射字符

    新建java文件,存储时Encoding选择了UTF-8, 由于语句中包含中文,javac编译时报错,提示"编码GBK的不可映射字符": 解决办法: 1.使用javac -enco ...

  3. appium环境搭建及项目实战

    手机端自动化环境搭建比其他自动化环境搭建较为复杂,安装工具有点多,也会有很多坑,安装工具一定注意版本号对应问题. 一.我的电脑环境:win7  64位,安卓测试机4.4.2版本,Python3.6,a ...

  4. Codeforces 992C Nastya and a Wardrobe (思维)

    <题目链接> 题目大意: 你开始有X个裙子 你有K+1次增长机会 前K次会100%的增长一倍 但是增长后有50%的机会会减少一个 给你X,K(0<=X,K<=1e18), 问你 ...

  5. Ajax技术使用补充

    Ajax技术使用补充 一.Ajax发送数据的几种形式 发送字符串或数字 $.ajax({ url:"/ajax_test.html/", type:'POST', data:{'v ...

  6. 关于GitHub中文乱码的问题

    其实跟Git里中文乱码相比,这个问题好解决得多. GitHub中的乱码是由于其使用的编码与Windows记事本的默认编码不同.只要在本地将编码改成UTF-8,再重新push就可以了. 修改编码的方法是 ...

  7. PHP学习笔记 ThinkPHP

    //检测文件是否存在 if(!file_exists(dirname(__FILE__)."/Bo/Admin/Conf/config.php")) { header('Locat ...

  8. 2018-6-21-随笔-WEB应用程序

    ASP.net Web应用程序 就是网站,就是一个可以运行.修改.变换的有界面 有后台的网站 Webservice 就是web服务  里面有好多的方法 对外提供数据的,只可以调用,本身没有任何的界面, ...

  9. Sql的行列(纵横表)转换

    1.行转列: 表结构和数据: DROP TABLE IF EXISTS `kj`; CREATE TABLE `kj` ( `姓名` ) DEFAULT NULL, `课程` ) DEFAULT NU ...

  10. [模板][P4719]动态dp

    Description: 给定一棵n个点的树,点带点权. 有m次操作,每次操作给定x,y,表示修改点x的权值为y. 你需要在每次操作之后求出这棵树的最大权独立集的权值大小. Hint: \(n,m&l ...