赞
踩
为了更好的理解 Docker 是什么,我们先来讲个故事:
我需要盖一个房子,于是我搬石头、砍木头、画图纸、盖房子。一顿操作,终于把这个房子盖好了。
结果,住了一段时间,心血来潮想搬到海边去。这时候按以往的办法,我只能去海边,再次搬石头、砍木头、画图纸、盖房子。
烦恼之际,跑来一个魔法师教会我一种魔法。这种魔法可以把我盖好的房子复制一份,做成「镜像」,放在我的背包里。
等我到了海边,就用这个「镜像」,复制一套房子,拎包入住。
是不是很神奇?对应到我们的项目中来,房子就是项目本身,镜像就是项目的复制,背包就是镜像仓库。
如果要动态扩容,从仓库中取出项目镜像,随便复制就可以了。Build once,Run anywhere!
不用再关注版本、兼容、部署等问题,彻底解决了「上线即崩,无休止构建」的尴尬。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker 技术的三大核心概念,分别是:
镜像 Image
容器 Container
仓库 Repository
- 核心概念如下:
-
- Build,Ship and Run(搭建、运输、运行)。
-
- Build once,Run anywhere(一次搭建,处处运行)。
-
- Docker 本身并不是容器,它是创建容器的工具,是应用容器引擎。
-
- Docker 三大核心概念,分别是:镜像 Image,容器 Container、仓库 Repository。
-
- Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。
-
- 由于 Namespace 和 Cgroups 功能仅在 Linux 上可用,因此容器无法在其他操作系统上运行。那么 Docker 如何在 macOS 或 Windows 上运行?Docker 实际上使用了一个技巧,并在非 Linux 操作系统上安装 Linux 虚拟机,然后在虚拟机内运行容器。
-
- 镜像是一个可执行包,其包含运行应用程序所需的代码、运行时、库、环境变量和配置文件,容器是镜像的运行时实例。
输入指令: uname -r
2、确保yum是最新的
- 建议首先输入“yum check-update”更新包数据库。
- 添加 yum 仓库
- 输入指令:
-
- tee /etc/yum.repos.d/docker.repo<<-'EOF'
-
- [dockerrepo]
-
- name=Docker Repository
-
- baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
-
- enabled=1
-
- gpgcheck=1
-
- gpgkey=https://yum.dockerproject.org/gpg
-
- EOF
-
- 安装 Docker
- 输入指令:yum install -y docker-engine
- 启动docker
- 在启动之前可以查看是否安装成功.
-
- 输入指令: docker version或者docker -v
-
- 然后启动,输入指令:systemctl start docker
- 输入指令:systemctl status docker 查看状态
- 设置开机自启动
- 输入指令:systemctl enable docker
-
-
-
- 配置镜像加速
-
-
- 设置 Docker Engine 写入配置:
-
- {
- registry-mirrors: [
- http://hub-mirror.c.163.com/,
- https://registry.docker-cn.com
- ],
- insecure-registries:[],
- experimental: false,
- debug: true
- }
基础镜像制作方法常见的有两种:
1、第一种是本地直接打包然后导入:
- #从本地端环境端打包镜像
- # tar --exclude=/usr/lib32 --exclude=/sys -cPvf nk-base.tar /usr
- 此命令将本机运行的操作系统打成一个.tar包,可以使用--exclude参数将不需要的目录进行排除,可排除多个目录。文件打包支持的类型只有.tar, .tar.gz, .tgz, .bzip, .tar.xz等几种格式。打包完成后放在/usr目录下。
-
- #导入镜像(需要运行端)
- # cat nk-base.tar | docker import - nk-base
- 将制作的tar包使用docker import镜像导入,并命令为:nk-base:
-
- #查看镜像
- docker images
-
- #创建并启动镜像构成容器
- # docker run -i -t nk-base /bin/bash
- 使用docker命令启动镜像。-i 以交互模式运行容器 -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用 /bin/bash是指在容器启动后容器内执行的命令
-
- #docker run -dit --name modis_seafog 9b5839a64119 /bin/bash
- 3、创建并启动容器
- docker run -dit --name pythonFirst 镜像id /bin/
- docker run -dit --name python3.8 942a6c3f7d5b /bin/sh
-
-
- #4、查看目前环境有多少容器
-
- docker ps -a
-
-
- 5、进入容器
- docker exec -it <NAMES> /bin/bash
-
- 此外还可以通过容器ID进入容器
- docker container -it <容器ID> bash
-
- 6、退出容器exit
- 或者 ctrl+d
-
- 7、关闭、启动、重启容器
- docker stop <容器ID>
- docker start<容器ID>
- docker restart<容器ID>
-
-
- 10、查看容器日志
- docker logs -f -t --since="日期" --tail=数量 容器id或名称
- 说明:
- -f : 查看实时日志 -t : 查看日志产生的日期 --since : 即只输出指定日期之后的日志 --tail=5 : 查看最后的5条日志
-
- 11、容器备份和恢复
- 1、备份容器
- docker commit -p <容器ID> 备份命名
-
- 12、接着将备份的镜像导出到本地
- docker save 备份命名 > d:\备份命名.tar
-
- 导出和导入容器
- 导出容器
-
- 如果要导出本地某个容器,可以使用 docker export 命令。
-
- $ docker export 1e560fca3906 > ubuntu.tar
-
- 导入容器快照
-
- 可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
-
- $ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
-
- 13、恢复容器
- docker load -i mypython.tar
-
-
- 2、拉取镜像
- docker image pull <repository>:<tag>
- 或者 docker pull <repository>:<tag>
- 演示:拉取python镜像
-
-
-
- #3、查看目前环境有多少容器
-
- docker ps -a
-
- docker container ls
-
- 或者 docker ps
-
- #删除容器ID
-
- docker rm 2cbfe9bfaa89
-
- 需要删除所有容器,加上$(docker ps -a -q)
-
- docker rm $(docker ps -a -q)
-
- #删除镜像
-
- docker rmi 800fdea41150
2、第二种方式也非常简单,直接使用脚本来制作:
# wget https://raw.githubusercontent.com/docker/docker/master/contrib/mkimage-yum.sh # chmod a+x ./mkimage-yum.sh # ./mkimage-yum.sh -y /etc/yum.conf nk-base执行完成后,基础镜像就创建成功了,使用docker images查看一下:
[root@192 hxb]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nk-base 7.4 a1942dd1e289 1 hours ago 383 MB
上海区阿里云容器服务地址: https://cr.console.aliyun.com/cn-shanghai
- #1、登录阿里云Docker Registry
- docker login --username=liu13752614153 registry.cn-beijing.aliyuncs.com
- 用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
- 您可以在访问凭证页面修改凭证密码。
-
- #2、从Registry中拉取镜像
- dockers pull registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8
-
- #3、将镜像推送到Registry
- docker push registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8
-
- #4、镜像重命名
- docker tag registry.cn-shanghai.aliyuncs.com/tcc_public/python:3.8 python3.8
ADD 指令和 COPY 的使用格类似(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
复制指令,从上下文目录中复制文件或者目录到容器里指定路径。
格式:
COPY [--chown=<user>:<group>] <源路径1>... <目标路径> COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
[--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。
<源路径>:源文件或者源目录,这里可以是通配符表达式,其通配符规则要满足 Go 的 filepath.Match 规则。例如:
COPY hom* /mydir/ COPY hom?.txt /mydir/
<目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
格式:
CMD <shell 命令> CMD ["<可执行文件或命令>","<param1>","<param2>",...] CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
推荐使用第二种格式,执行过程比较明确。第一种格式实际上在运行的过程中也会自动转换成第二种格式运行,并且默认可执行文件是 sh。
什么是Dockerfile?
Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),有了 Dockerfile,就可以创建我们所需要的镜像
touch Dockerfile
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。