Site
Site
文章目录
  1. Description
  2. Docker通常用于如下场景
  3. Docker 的优点
  4. Docker 的核心
    1. 镜像
    2. 容器
    3. 仓库
  5. Docker安装
    1. yum安装
    2. 二进制安装
  6. Docker基本使用
    1. 镜像使用
      1. 列出镜像列表
      2. 查找镜像
      3. 获取镜像
      4. 导入导出镜像
      5. 删除镜像
      6. 创建镜像
    2. 容器使用
      1. 启动容器
      2. 列出容器
      3. 进入容器
      4. 导入导出容器
      5. 删除容器
      6. 容器端口映射
      7. 容器数据持久化
      8. 容器的数据拷贝
    3. 安装centos7容器
    4. 获取centos7镜像
    5. 检查是否导入成功
    6. 运行容器,并且可以通过 exec 命令进入 CentOS 容器
    7. 安装成功
  7. 操作容器
    1. 导出容器
    2. 导入容器为镜像
    3. 通过镜像启动容器
    4. 检查容器运行状态
    5. 导出镜像

Docker

Description

Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的,可移植的自给自足的容器,开发者可以打包应用以及依赖包到这个容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker通常用于如下场景

  • web应用的自动化打包和发布
  • 自动化测试和持续集成,发布
  • 在服务型环境中部署和调整数据库或者其他的后台应用
  • 从头编译或者扩展现有的OpenShift 或 Cloud Foundry平台来搭建自己的PaaS环境

Docker 的优点

  1. 简化程序:打包应用和依赖到Docker容器中进行管理,方便快捷,而且更新简单,可以轻松迁移和扩展。
  2. 简化部署多种应用实例工作,web应用,后台应用,数据库应用,大数据应用比如hadoop集群,消息队列等都可以打包成一个镜像部署,快速的交付和部署。
  3. 节省开支。
  4. 高效的资源利用。

Docker 的核心

镜像

镜像类似于虚拟机镜像,可以理解为一个面向docker引擎的只读模板,包含了系统文件。
镜像是流行的Linux系统的(CentOS,Ubuntu),然后在上面安装应用程序。
镜像是创建容器的基础,通过版本管理和增量的文件系统,docker可以简单的创建和更新现有的镜像,也可以直接使用网上下载的镜像。

容器

容器相当于一个轻量级的沙箱,用来运行和隔离应用。
容器是从镜像创建的应用运行实例,可以将其启动,开始,停止,删除,这些容器是相互隔离,互不可见的。
镜像自身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。

仓库

仓库类似于代码仓库,是docker集中存放镜像文件的场所。
docker仓库和注册服务器是不一样的,注册服务器是存放仓库的地方,可以包含很多个仓库 ,每个仓库集中存放某一类镜像,往往包含多个镜像文件,通过不同的标签区分。
仓库分为公共仓库和私有仓库,公共仓库是存放的共享镜像文件,目前最大的是Docker Hub,用户可以创建私有仓库在自己的局域网中。

Docker安装

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

yum安装

检查能连接外网或者有内部yum源(/etc/yum.repos.d/下),长亮合度机器可在/etc/yum.repos.d/新建一个docker.repo文件,配置信息如下

[docker]
name=Docker Packages for Enterprise Linux 7 - $basearch
baseurl=http://e-proxy.yfb.xfan.cn/repos/docker-ce/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=http://e-proxy.yfb.xfan.cn/repos/docker-ce/gpg

有可用的yum源后,执行命令安装docker:

# 安装docker
yum install docker-ce -y
# 启动docker服务
systemctl start docker
# 设置docker服务开机自启
systemctl enable docker
# 其他: 服务的重启和关闭
systemctl restart/stop docker

二进制安装

参考官方文档 上传docker安装包,解压安装包并运行docker服务

#解压目录
tar xzvf docker-19.03.12.tgz
#拷贝运行文件
cp docker/* /usr/bin/
#启动服务
dockerd &

Docker基本使用

镜像使用

列出镜像列表

我们可以使用 docker images 来列出本地主机上的镜像

docker images
查找镜像

可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/,也可以使用 docker search 命令来搜索镜像

docker search httpd
获取镜像

如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像(能连接外网或配置了私有镜像仓库):

docker pull ubuntu:13.10
导入导出镜像

使用 saveload 命令可以把镜像导出或者导入

#导出ubuntu:v3镜像保存到本地my_ubuntu_v3.tar
docker save -o my_ubuntu_v3.tar ubuntu:v3
#导入my_ubuntu_v3.tar至本地
docker load -i my_ubuntu_v3.tar
删除镜像

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

docker rmi hello-world
创建镜像

当下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改

1)docker commit 从已经创建的容器中更新镜像,并且提交这个镜像

docker commit -m="has update" -a="xfan" e218edb10161 xfan:2.0.1.6

2)使用 Dockerfile 来构建一个新的镜像

xfan@localhost:~$ cat Dockerfile
FROM    centos:7.6
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd xfan
RUN     /bin/echo 'xfan:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么

然后,使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像

docker build -t xfan/centos:7.6 .

xfan-boot Dockerfile

FROM 10.22.20.72/library/jdk:1.8
COPY xfan-boot-2.0.11-bin.tar.gz /
COPY docker-entrypoint.sh /usr/local/bin/
RUN tar zxf xfan-boot-2.0.11-bin.tar.gz \
    && rm -rf xfan-boot-2.0.11-bin.tar.gz \
    && mv xfan-boot-2.0.11 xfan-boot \
    && echo "2.0.11" > xfan-boot/version.txt \
    && chmod +x /usr/local/bin/docker-entrypoint.sh
EXPOSE 8081
WORKDIR /xfan-boot
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["/bin/bash", "-c", "/bin/bash /xfan-boot/bin/startup.sh \
    && tailf  /xfan-boot/logs/default.log "]

容器使用

启动容器

使用 docker run 启动容器

docker run -itd --name ubuntu-test ubuntu /bin/bash

参数说明:

  • i: 交互式操作。
  • t: 终端。
  • d: 后台运行
  • ubuntu: ubuntu 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

注:启动后可通过docker logs -f ubuntu-test查看相关日志

列出容器

查看所有的容器

docker ps -a
3.2.3.运行关闭重启容器
docker start/stop/restart b750bbbcfd88  #通过容器ID
docker start/stop/restart ubuntu-test   #通过容器名称
进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

docker exec -it 243c32535da7 /bin/bash
导入导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

docker export 1e560fca3906 -o ubuntu.tar

可以使用 docker import 从容器快照文件中再导入为镜像

docker import  ubuntu.tar ubuntu:v4
删除容器
docker rm 1e560fca3906 # -f 强制删除,不管容器是否停止
容器端口映射

要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射

docker run --name nginx-test -p 8080:80 -d nginx
容器数据持久化

删除容器会试容器内的数据全部删除,对于一些比如重要或者需要持久化的数据,可以通过启动容器时加-v进行本地目录的映射

mkdir /data/mysql/conf –p && cd /data/mysql
docker run -p 3306:3306 –name=mysql -v $PWD/conf:/etc/mysql/ -v $PWD/logs:/logs  -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.42
容器的数据拷贝

使用docker cp命令可以将宿主机的文件拷贝至容器或容器的文件拷贝回宿主机

docker cp /www/pte 96f7f14e99ab:/www/ # 宿主机拷贝至容器
docker cp nginx:/www/pte  /tmp/  # 容器拷贝至宿主机

###实例演示

安装centos7容器

获取centos7镜像

docker pull centos:centos7 或 docker load -i centos7.tar

检查是否导入成功

docker images

运行容器,并且可以通过 exec 命令进入 CentOS 容器

docker run -itd --name centos-test centos:centos7
docker exec -it centos-test /bin/bash

安装成功

通过 docker ps 命令查看容器的运行信息

docker ps

操作容器

可以通过exec进入容器进行操作,比如安装jdk,部署应用,配置启动脚本等

导出容器

由于通过docker commit容器提交为镜像会保存容器的操作记录,使得镜像比较大,可以使用docker export 保存容器快照,减少文件大小

docker export  centos-test -o xfan.tar

导入容器为镜像

导出的容器快照通过dcoker import导入为镜像

docker import  ./xfan.tar sun_job:2.2.0.6

通过镜像启动容器

使用docker run启动容器,启动命令可以是自定义的启动脚本

docker run -dit --name=xfan -p 9080:8080 -p 9999:9999  sun_job:2.2.0.6 sh /root/startup.sh

检查容器运行状态

运行容器后,可通过docker logs -f ,docker ps 检查容器服务是否启动成功

docker ps
docker logs -f xfan

导出镜像

确定镜像没问题后,通过docker save 保存镜像,可通过该镜像文件拷贝至其他机器导入运行

docker save -o  sun_job20210121.tar sun_job:2.2.0.6
支持一下
扫一扫,支持xfan
  • 微信扫一扫
  • 支付宝扫一扫