armbian docker Chrome_Docker入门 - USTCINFO_QC

作者: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

 34d3ee3bacd411645bf48109424ca10c.png

 解析:

7c34dcb70ebbb859f926077ccef706d0.png

(2)    查询可安装版本

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

 60cb4db5b73ba976542d09e377ab631a.png

(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",然后输出结果。

       运行效果如下:

 e0027e8688bc9507c9a2d442e96886f6.png

  运行交互式容器

.1   前台模式

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

参数解释:

       -i: 交互式操作。

       -t: 终端

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

7ebcd5dffad0104a28f373854dd0bd88.png 

.2   后台模式

(1)    启动

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

参数解释:

       -d:后台运行

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

49e5abc83a5d8b9bde99f3d59f862716.png 

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

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

 492c40dd6e5f66fc272ecf71e6ac3a76.png

解析:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

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

CREATED: 容器的创建时间。

STATUS: 容器状态。

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

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

容器状态如下:

13cd89102da32257f9bb3ed7c80faee3.png

(2)    查看运行日志

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

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

 5178dff547bff9cf5c6c9842259321c8.png 

(3)    停止容器运行

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

499b8d1fc72f1fce89e9728329d45d39.png 

  常用命令

.1   查看所有的容器

命令:docker ps -a

748e347a01bb6bb836b45ae53c15c7e4.png 

.2   启动已停止的容器

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

1ba5e1f50f3dc6eceb8411c3597cc70f.png 

.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

4ab85a57546ad6ceaf480cc6c6a82dc1.png

.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查看镜像库

d7635905af186d3d412ad74e0c29d202.png

.8   删除容器

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

ed3aa5117150648e70b159051232bea5.png

.9   删除镜像

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

ec469ffaa00504337b56295c9aca187f.png

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:拷贝到的容器目录

如:

f6aea62b707bfed2d13c4a46a3a8542d.png

  防火墙配置

直接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 .

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

b367dd132ebfbf9e8aeeb5215a09e088.png

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

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

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

344d7f391af7ee6c28caac3f71cae63a.png

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

0bb64ba7325c556941c431509fd887b5.png

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

4da26e26ffe75892dbb75a0983250075.png

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

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

解决方法:

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

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

查看放火墙状态:systemctl status firewalld

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

systemctl disable firewalld.service

systemctl stop firewalld

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值