Docker介绍及镜像制作和导入

5 篇文章 0 订阅
1 篇文章 0 订阅
本文详细介绍了Docker的基础知识,包括其概念、安装步骤(在线安装)、从Dockerhub下载镜像、镜像的制作方法(Dockerfile)以及镜像的导出和导入。此外,还列举了Docker的一些常用命令,如启动、停止、删除容器,以及容器和镜像的区别。内容适合Docker初学者,旨在帮助读者快速理解和掌握Docker的基本操作。
摘要由CSDN通过智能技术生成


作者: 良霄

1、docker简介

官网: https://www.docker.com/
在这里插入图片描述

什么是docker

Docker时Docker.Lnc公司开源的一个基于LXC(linux容器)技术之上搭建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化。使用docker轻松部署应用程序。

集装箱化的优点

  • 灵活:即使是复杂的应用程序也可封装。
  • 轻量级:容器利用并共享主机内核。
  • 便携式:您可以在本地构建,部署到云上并在任何地方运行。
  • 可扩展性:您可以增加和自动分发容器副本。
  • 可堆叠:您可以垂直堆叠服务并及时并及时堆叠服务。

容器和镜像的区别

docker的整个生命周期有三部分组成:镜像(image)+ 容器(container)+ 仓库(repository)。

  • docker的镜像概念类似虚拟机的镜像。是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

  • docker镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为UnionFS( Union file system 统一文件系统),镜像可以基于dockerfile构建,dockerfile是一个描述文件,里面包含了若干条密令,每条命令都会对基础文件系统创建新的层次结构。

  • docker利用容器来运行应用:docker容器是由docker镜像创建的运行实例。docker容器类似虚拟机,可以执行包含启动,停止,删除等。

  • 每个容器间是相互隔离的。容器中会运行特定的运用,包含特定应用的代码及所需的依赖文件。可以把容器看作一个简易版的linux环境(包含root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。

  • 仓库类似于maven仓库,里面有很多官方或者第三方上传的镜像供我们使用,仓库的坐标都是 镜像名称:版本

2、docker安装

注意:docker需要root用户执行

官方帮助文档:https://docs.docker.com/engine/install/

docker分为在线安装和离线安装这里演示在线安装

在线安装

#1. 卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#2. 安装需要的安装包
yum install -y yum-utils

#3. 设置镜像仓库 国外镜像过慢,这里设置的是阿里的镜像仓库
yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#4. 安装docker相关的  docker-ce是社区版  ee是企业版
  # 安装最新的版本
  yum install docker-ce docker-ce-cli containerd.io
  # 安装指定版本
  yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
  # 查看所有版本
  yum list docker-ce --showduplicates | sort -r
  # 例如安装18.09.9版本
  yum install -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io

#5. 启动docker
systemctl start docker

#6. 使用docker version查看是否按照成功
docker version

#7. 测试
	docker run hello-world
  # 显示以下信息表示成功
  Unable to find image 'hello-world:latest' locally
  latest: Pulling from library/hello-world
  0e03bdcc26d7: Pull complete 
  Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
  Status: Downloaded newer image for hello-world:latest

  Hello from Docker!
  This message shows that your installation appears to be working correctly.

#8. 查看已经下载的镜像
docker images

卸载docker

#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2. 删除资源 var/lib/docker 是docker的默认工作路径!
rm -rf /var/lib/docker

docerk rund基本流程

3、从 docker hub下载安装镜像

我们这里以Tomcat为例

  1. 查询我们需要的镜像
docker search tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZO54nAQs-1601380994930)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825180850863.png)]

如果上面没有我们需要下载的镜像我们可以到 https://hub.docker.com/ 上找到我们需要的版本指定下载

  1. 拉取镜像

    docker pull tomcat:8.5.43
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-swavfCQl-1601380994932)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825182222865.png)]

  2. 查看刚下载的镜像

    docker images
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yt1geyCC-1601380994933)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826170427413.png)]

  3. 启动tomcat

    # -d 后台方式运行
    # -it 交互式运行
    # --name 指定容器名字
    # -p 指定端口映射  宿主机端口:容器端口   因为每个容器相互独立,所以各个容器的端口可以重复
    #    注意:映射的容器内的端口容器需要暴露出来
    # docker run -d --name <自定义容器名> -p <宿主机端口>:<容器端口> <镜像名称>:<镜像版本>
    # 如果我们第一启动就以挂载的方式启动,会报配置文件找不到的错,所以需要先正常启动容器然后在进行后续操作
    docker run -d --name tomcat -p 8080:8080 tomcat:8.5.43
    
    # 查看tomcat是否启动
    docker ps
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpybHDUY-1601380994935)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826170123309.png)]

  4. 进入进行然后把conf、logs和webapps目录copy出来

    # 找到container_id
    docker ps
    # 进入镜像 -it 交互式运行
    docker exec -it ff56c7550098  /bin/bash
    
    

    进入容器成功

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8UnD8TWt-1601380994936)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825185547905.png)]

    退出容器

    命令:exit
    快捷健: 
    	windows: ctrl + q + p    
    	mac:control + q + p
    
  5. 以挂载方式启动

    # 复制容器中的文件到宿主机 
    # 命令  docker cp 容器id:容器中文件/目录路径  宿主机地址
    # 这复制的是Tomcat的conf、webapps和logs
    docker cp  ff56c7550098:/usr/local/tomcat/conf  /home/gpos/docker/chilTomcat/
    docker cp  ff56c7550098:/usr/local/tomcat/webapps  /home/gpos/docker/chilTomcat/
    docker cp  ff56c7550098:/usr/local/tomcat/logs  /home/gpos/docker/chilTomcat/
    
    # 如果我们复制完文件后直接启动会报错 是因为我们启动是通过 --name指定了容器的名字,该名字全局唯一
    # docker: Error response from daemon: Conflict. The container name "/tomcat" is already in use by container "ff56c7550098cdb05590479116f246166235f6096c4e8c4e0325d1569b204e62". You have to remove (or rename) that container to be able to reuse that name.
    
    # 以为目前我还没有对容器进行操作 直接删除现在的容器 从新运行即可, 如果期间添加了配置等 可以先提交容器成为新的镜像
    # 这里我们演示直接删除的容器,  提交容器后续会提到
    # 注意 删除容器前要先停止容器
    # 停止容器 docker stop 容器id
    docker stop ff56c7550098
    
    # 删除容器
    docker rm ff56c7550098
    
    # 确认是否删除
    docker ps # 查看对应的容器是否还在
    
    # 以挂载方式启动
    # -v 宿主机文件/目录地:址容器中文件/目录地址	可以挂载多个文件目录
    # 当我们挂载成功以后,修改宿主机上面文件容器中的文件会同步修改
    docker run -d --name tomcat -p 8080:8080 \
    -v /home/gpos/docker/chilTomcat/conf:/usr/local/tomcat/conf \
    -v /home/gpos/docker/chilTomcat/logs:/usr/local/tomcat/logs \
    -v /home/gpos/docker/chilTomcat/webapps:/usr/local/tomcat/webapps \
    tomcat:8.5.43
    # 启动成功
    docker ps # 查看对应的容器是否成功
    

    验证

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsrmwU91-1601380994938)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825192857090.png)]

  6. 修改配置查看是否挂载成功

    在宿主机的挂载目录webapps中创建 test目录,查看容器是否同步到, 反之亦然

    # 宿主机创建test目录
    mkdir test
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4paugvmy-1601380994939)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825193215634.png)]

    在容器中查看

    # 进入容器
    docker exec -it 9273616f295c  /bin/bash
    

    同步成功

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qalaNHM6-1601380994940)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825193346371.png)]

  7. 在宿主机修改文件重启tomcat

    # 修改tomcat主页
    # 进入webapps/WEB-INF下修改index.jsp
    # 重启容器  如果修改的是静态文件可以不用重启
    docker restart 9273616f295c
    

    访问查看是否生效

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0qgNRmZW-1601380994940)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826092845797.png)]

    修改生效 ,挂载成功

4、镜像制作

建议用第二种方式, 第一种是一次性的

4.1、通过官方镜像制作(不建议)

注意:通过此方式制作镜像时,修改配置文件需要启动容器进入容器内部进行修改,如果修改挂载出来的文件,在制作镜像时修改的内容不会加载到新的镜像里!!!!

  1. 制作镜像

    进入容器创建测试文件夹

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wo7MvJ5H-1601380994941)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826150628084.png)]

# docker commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[版本TAG]

docker commit -a="chilx" -m="init my tomcat" 9273616f295c mytomcat:v1

生成成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYmD5TIp-1601380994942)(/Users/chilx/Library/Application Support/typora-user-images/image-20200825195202095.png)]

  1. 简单的运行查看修改是否生效
# -it 交互式运行 直接进入容器
docker run -it --name tomcat1 -p 8090:8080 mytomcat:v1 /bin/bash

​ 测试目录存在说明镜像制作成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PUAp7G07-1601380994942)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826150949817.png)]

4.2、通过Dockefiler制作(建议)

这里也是以tomcat为例

  1. 下载tomcat到服务器

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CcBf4m3a-1601380994943)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826105013315.png)]

  2. 解压并修改配置(这里我修改首页)

    # 解压
    tar -zxvf apache-tomcat-8.5.57.tar.gz
    
    # 修改index.jsp
    
    
  3. 编写Dockerfile(文件名就叫Dockerfile不可修改)

    # 基础镜像 从哪里开始
    FROM openjdk:8u252-jdk
    
    #作者
    MAINTAINER  xxxx <xxx@xxxx.com>
    
    #添加文件到镜像   宿主机位置 镜像中位置
    ADD apache-tomcat-8.5.57/  /usr/local/tomcat/
    
    #声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
    VOLUME /usr/local/tomcat/webapps
    VOLUME /usr/local/tomcat/conf
    VOLUME /usr/local/tomcat/logs
    
    #暴露8080端口
    EXPOSE 8080
    RUN cd /usr/local/tomcat/bin
    #启动容器时的进程
    ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh", "run"]
    
  4. 构建镜像

    # 命令 docker build -t <镜像名>:<版本> .
    # 注意不要忘记最后的点, 在Dockerfile的目录执行
    docker build -t mytomcat2:v1 .
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJe0vrbh-1601380994943)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826113711807.png)]

  5. 检查验证

    # 查看镜像
    docker images
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PeVx65tY-1601380994944)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826113933798.png)]

    # 执行镜像
    docker run -d --name mytomcat2 -p 8091:8080 mytomcat2:v1
    

    验证

    我们修改的内容已经在新的镜像中了

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xgQTwlvA-1601380994945)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826114248341.png)]

5、镜像导出和导出

  1. 导出镜像
# 导出命令 docker save [options] images [images...]
# 导出我们制作的mytomcat2
docker save > mytomcat2.tar mytomcat2:v1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Az1eHcqF-1601380994946)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826152428531.png)]

# 删除旧的镜像
docker rmi 948e5a83f6b2

mytomcat2已经被删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SdS9JJuv-1601380994946)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826152812136.png)]

  1. 导入镜像
# 导入命令 docker load [options]
# 导入刚导出的镜像(导入前记得删除以前的镜像)
docker load < mytomcat2.tar

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VIfbKRMi-1601380994947)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826153023583.png)]

  1. 查看验证
docker images

导入成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tf0tzRJm-1601380994948)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826153213089.png)]

启动

docker run -d --name importtomcat -p 8092:8080 mytomcat2:v1

验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YP6Ap7AL-1601380994948)(/Users/chilx/Library/Application Support/typora-user-images/image-20200826155039502.png)]

导入成功

6、基本命令

attach      Attach local standard input, output, and error streams to a running container
#当前shell下 attach连接指定运行的镜像
build       Build an image from a Dockerfile # 通过Dockerfile定制镜像
commit      Create a new image from a container's changes #提交当前容器为新的镜像
cp          Copy files/folders between a container and the local filesystem #拷贝文件
create      Create a new container #创建一个新的容器
diff        Inspect changes to files or directories on a container's filesystem #查看docker容器的变化
events      Get real time events from the server # 从服务获取容器实时时间
exec        Run a command in a running container # 在运行中的容器上运行命令
export      Export a container's filesystem as a tar archive #导出容器文件系统作为一个tar归档文件[对应import]
history     Show the history of an image # 展示一个镜像形成历史
images      List images #列出系统当前的镜像
import      Import the contents from a tarball to create a filesystem image #从tar包中导入内容创建一个文件系统镜像
info        Display system-wide information # 显示全系统信息
inspect     Return low-level information on Docker objects #查看容器详细信息
kill        Kill one or more running containers # kill指定docker容器
load        Load an image from a tar archive or STDIN #从一个tar包或标准输入中加载一个镜像[对应save]
login       Log in to a Docker registry #
logout      Log out from a Docker registry
logs        Fetch the logs of a container
pause       Pause all processes within one or more containers
port        List port mappings or a specific mapping for the container
ps          List containers
pull        Pull an image or a repository from a registry
push        Push an image or a repository to a registry
rename      Rename a container
restart     Restart one or more containers
rm          Remove one or more containers
rmi         Remove one or more images
run         Run a command in a new container
save        Save one or more images to a tar archive (streamed to STDOUT by default)
search      Search the Docker Hub for images
start       Start one or more stopped containers
stats       Display a live stream of container(s) resource usage statistics
stop        Stop one or more running containers
tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top         Display the running processes of a container
unpause     Unpause all processes within one or more containers
update      Update configuration of one or more containers
version     Show the Docker version information
wait        Block until one or more containers stop, then print their exit codes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值