作者:cao.dingzheng; cai.ruiying [ZSK]

1     初识Docker

1.1  是什么?

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口,它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就像在真实的物理机上运行一样。这样一来,就不用担心环境问题。

为什么使用它?

为什么要使用Docker呢?我们来看看它的几大优势。第一,快速交付和部署,解决环境配置难题;第二,高效虚拟化,内核级的虚拟化,使得它占用资源少、启动快、体积小,能够带来更高的性能和使用效率;第三,灵活应用,它几乎可以在任意的平台上运行,包括物理机、虚拟机、云服务器等,因此它的迁移、扩展更轻松;第四,简单易用,它的修改以增量的方式被分发和更新,从而实现自动化并且高效的管理。

下面我们对比一下Docker与常用的Linux虚拟机的关键点,就可以一目了然的了解到Docker的优势。

Docker VS VM

VM(Virtual Machine,虚拟机)是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。

Docker只包含应用程序以及依赖库,基于libcontainer运行在宿主机上(libcontainer 是Docker中用于容器管理的包),并处于隔离环境,因此Docker更加轻量高效,

至此,我们可以了解到,我们可以把Docker当作轻量级的虚拟机,它同样能够能够提供虚拟化的环境,但是成本却小得多,一台主机上可以同时运行数千个 Docker 容器。       当然,它目前仍然存在不足,例如:隔离效果不如VM;网络配置功能相对简单,主要以桥接方式为主等。通过这些了解,我们可以根据自己的需要,选择使用。

2     安装与使用

(备注:本文以CentOS为例。)

安装

Docker支持CentOS及以上64位版本,我们根据自己Linux机器的具体版本,来选择安装。

(1) 查看Linux版本

命令:uname -r

解析:

(2)    查询可安装版本

命令:yum list docker-ce  --showduplicates | sort -r

(3)    安装

命令:yum install docker-ce-<版本号> docker-ce-cli-<版本号>

例如:yum install docker-ce-18.09.9 docker-ce-cli-18.09.9

注意:这里的版本,要从我们刚才查询到的列表中选择。

使用

(1)    启动

命令:systemctl start docker

(2)    验证

命令:docker --help,或者:docker run hello-world

(3)    在容器内运行一个应用程序

命令:docker run ubuntu: /bin/echo "Hello world"

解析:

ubuntu: 格式是docker镜像名称:tag标签,指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

以上命令完整的意思可以解释为:Docker 以 ubuntu 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

运行效果如下:

运行交互式容器

.1   前台模式

命令:docker run -i -t ubuntu: /bin/bash

参数解释:

-i: 交互式操作。

-t: 终端

/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

.2   后台模式

(1)    启动

命令:docker run -it -d ubuntu: /bin/sh -c "while true; do echo hello world; sleep 1; done"

参数解释:

-d:后台运行

在输出中,我们没有看到期望的 "hello world",而是一串长字符:0ecf61b8208b8d87bce7f6472e4c934b3001ec825457a2c43221dd84ec38fb58

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以查看进行:docker ps

解析:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

容器状态如下:

(2)    查看运行日志

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

命令:docker logs ID号 或者docker logs 容器名称(NAMES)

(3)    停止容器运行

命令:docker kill ID号/容器名称(NAMES)或者docker stop ID号/容器名称(NAMES)

常用命令

.1   查看所有的容器

命令:docker ps -a

.2   启动已停止的容器

命令:docker start ID号 或者docker start  容器名称(NAMES)或者docker restart ID号/容器名称(NAMES)来进行重启(已有容器)

.3   后台启动容器

后台启动容器命令:docker run -itd --name centos7-test centos:centos7 /bin/bash

参数解释:

--name:为启动的容器命名

在使用 -d 参数时,容器启动后会后台运行。

.4   进入后台运行的容器

(1)    进入后台运行的容器:docker attach ID号或者names

说明:退出容器终端会导致容器停止。

(2)    进入后台运行的容器:docker exec -it ID号或者names /bin/bash

说明:推荐大家使用 docker exec 命令,此命令进入容器后,退出容器终端时,不会导致容器的停止。

.5   退出容器

命令:exit

.6   导出容器/镜像

(1)    导出容器:docker export ID号或者names > 导出路径

如:docker export 1e560fca3906 > ubuntu.tar

docker export ubuntu-test > /home/qc/cdz/docker/ubuntu.tar

(2)    导出镜像:

docker save image > 路径

如:docker save cdz/centos7.v2 > /home/qc/cdz/docker/centos/centos7.v2.tar

.7   导入镜像

命令:cat /home/qc/cdz/docker/centos7.tar | docker import – cdz/ centos7.v1: centos7

可以通过docker images查看镜像库

.8   删除容器

命令:docker rm -f ID号或者names

.9   删除镜像

命令:docker image rm -f IMAGE ID 或者RESPOSITORY:TAG

3     实战演示-docker部署LuckyFrame服务端

docker安装centOS

访问 CentOS 镜像库地址:

拉取指定版本的centOS镜像:docker pull centos:centos7

运行容器:docker run -itd --name centos-test centos:centos7

3.2  docker安装MySQL

访问 MySQL 镜像库地址:

运行MySQL:

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:

参数说明:

-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。

MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。

docker安装Python

访问 Python 镜像库地址:

运行Python:

docker run  -v $PWD/myapp:/usr/src/myapp  -w /usr/src/myapp python: python

参数解释:

-v $PWD/myapp:/usr/src/myapp: 将主机中当前目录下的 myapp 挂载到容器的 /usr/src/myapp。

-w /usr/src/myapp: 指定容器的 /usr/src/myapp 目录为工作目录。

python : 使用容器的 python 命令来执行工作目录中的 文件。

将本地文件拷贝到docker容器中

命令:docker cp 拷贝文件 容器id/names:拷贝到的容器目录

如:

防火墙配置

直接pull下载的centos7镜像存在防火墙未关闭无法访问的问题,这里提供解决方法。

首先运行centos7镜像后进入容器。

然后下载firewalld systemd:yum install firewalld systemd -y

查看放火墙状态:systemctl status firewalld

彻底关闭防火墙,两个命令均需执行:

systemctl disable firewalld.service

systemctl stop firewalld

最后将运行的容器导出为tar包再导入到imags里,这时防火墙问题已经解决了。

构建LuckyFrame平台服务端镜像

.1   创建Dockerfile

(备注:这里LuckyFrame平台服务端运行需要java环境)

首先将jdk的压缩包、luckyframe的Web端放到同一路径下,在该路径下建一个Dockerfile文件。

如:

# 拉取基本镜像
FROM cdz/centos7.v2:centos7
# 维护者信息
MAINTAINER caodingzheng
# 加载jdk安装包
ADD jdk-8u261-linux-x64.tar.gz /usr/local
# 环境变量设置
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
# 设置语言
ENV LANG=""
# 导入jar包
ADD  /
# 执行jar包
ENTRYPOINT ["java","-jar","/"]

说明:

这里不需要设置对外端口

已经是配置好的,包括数据库和端口,配置的端口号为8018。

.2   构建镜像

使用docker build创建镜像,命令为:

docker build -f Dockerfile -t 镜像名称:tag标签 .

如:docker build -f luckyframeDockerfile -t luckyframe3.2:centos7 .

注意:最后的“.”不要遗漏,这里表示当前路径。

创建容器(运行LuckyFrame服务端)

命令:docker run -itd --name luckyframe -p 8018:8018 luckyframe3.2:centos7 /bin/bash

这样我们的包就启动好了,我们可以通过设置的端口进行访问。

访问地址:http://ip:port/login

4     常见问题

安装报错

问题:

Package: 3: (docker-ce-stable) Requires: container-selinux >=

原因:

container-selinux版本低或者是没安装。yum 安装container-selinux 一般的yum源又找不到这个包。需要安装epel源才能yum安装container-selinux。

解决方法:

直接用yum安装container-selinux可能会报错,可以进行如下步骤:

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum install epel-release

yum install container-selinux

yum install docker-ce-18.09.9 docker-ce-cli-18.09.9

这时docker镜像就完成了安装。

直接pull下载的centos7镜像存在防火墙未关闭无法访问

解决方法:

首先运行centos7镜像后进入容器。

然后下载firewalld systemd:yum install firewalld systemd -y

查看放火墙状态:systemctl status firewalld

彻底关闭防火墙,两个命令均需执行:

systemctl disable firewalld.service

systemctl stop firewalld

最后将运行的容器导出为tar包再导入到imags里,这时防火墙问题已经解决了。

armbian docker Chrome_Docker入门 - USTCINFO_QC相关推荐

  1. 《Docker技术入门与实战》——2.4 本章小结

    本节书摘来自华章计算机<Docker技术入门与实战>一书中的第2章,第2.4节,作者:杨保华,戴王剑,曹亚仑著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  2. Docker从入门到实践

    一般说来 SPA 的项目我们只要启一个静态文件 Server 就可以了,但是针对传统项目就不一样了,一个项目会依赖很多服务端程序.之前我们的开发模式是在一台开发机上部署开发环境,所有人都在这台开发机上 ...

  3. 《Docker技术入门与实战》——2.3 本书环境介绍

    本节书摘来自华章计算机<Docker技术入门与实战>一书中的第2章,第2.3节,作者:杨保华,戴王剑,曹亚仑著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. ...

  4. Docker新手入门:基本用法

    Docker新手入门:基本用法 1.Docker简介 1.1 第一本Docker书 工作中不断碰到Docker,今天终于算是正式开始学习了.在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少 ...

  5. Docker快速入门实践-纯干货文章

    Docker快速入门实践-老男孩高级架构师课程内容,如果细看还能发现讲解视频呦!小伙伴们赶紧猛戳吧! 老男孩高级架构师内部学员实践文档分享! Docker快速入门实践-纯干货文章 老男孩教育2016启 ...

  6. docker快速入门_Docker标签快速入门

    docker快速入门 by Shubheksha 通过Shubheksha Docker标签快速入门 (A quick introduction to Docker tags) If you've w ...

  7. 《 Docker 技术入门与实战 》读书笔记 ( CentOS 安装 Docker )

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS :个人所有读书笔记只记录个人想要的内容,很可能原书大量内容没有纳入笔记中... ... 以下全 ...

  8. Docker 精通之入门

    Docker 精通系列 Docker 精通之入门 Docker 精通之微服务 Docker 精通之常用命令 Docker 精通之 Dockerfile 2013年发布至今, Docker 一直广受瞩目 ...

  9. Docker从入门到实战(四)

    一步一步走,写小白都能看懂的文章,将持续更新中,敬请期待! Docker从入门到实战(四) Docker基础 一:Docker基本操作 一般情况安装Docker之后系统会自动创建一个Docker的用户 ...

最新文章

  1. python调用百度识别文字接口_python调用百度通用文字识别接口进行验证码识别
  2. c语言指针概述,C语言指针概述.doc
  3. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】
  4. hdu5831 Rikka with Parenthesis II
  5. redis 内存不足 排查_Redis 系统学习之 redis 内存模型
  6. python new init_python的new与init
  7. python start
  8. 清晰的史密斯圆图 wiki上的
  9. “隔空播放”显示器只有“关闭”的原因
  10. 关于Android的ImageView置顶
  11. 3GPP TS 29244-g30 中英文对照 | 5.2.6 Combined SGW/PGW Architecture
  12. 怎么用计算机弹出soldout,关于sellout和soldout。
  13. Flutter学习日记之底部导航栏BottomNavigationBar组件的使用
  14. 《牡丹亭》中的情与理
  15. 数据结构——栈(栈结构、栈面试题、栈的操作、栈结构实现、进制的转换)
  16. JVM(5)_方法区和大厂面试题
  17. MDSF:Mendix介绍
  18. 【Go语言 · 学习笔记】
  19. excel方差函数和均方差函数使用介绍
  20. 【计算机网络实验】 主机路由器服务器的基本配置 | Cisco Packet Tracer

热门文章

  1. 二、Android应用的界面编程(六)ProgressBar及其子类[SeekBar、RatingBar]er
  2. 2月第3周全球五大顶级域名总量净减6.1万个 降幅明显
  3. 一个小学教师建站的不惑与困惑
  4. red hat 5.5 vncserver搭建
  5. shell tr命令
  6. 基于Udp的Socket网络编程聊天程序
  7. 关于北大陈秉乾教授的一些趣事
  8. resin3的优化配置
  9. 桥牌笔记:让敌方的Q、J、10、X只拿一墩的打法
  10. 软件项目成员的业绩考核