首页 > 运维 > linux运维 > 正文

From Docker to Kubernetes(一)- Image And Container

雪夜
发布: 2025-07-23 11:30:26
原创
872人浏览过

一、docker概述

首先,Docker是一种容器技术的实现,那么什么是容器呢?

From Docker to Kubernetes(一)-  Image And Container

容器可以在许多主流操作系统上运行,一个操作系统上可以运行多个容器,这些容器共享同一个操作系统内核。容器之间相互隔离,对软件及其依赖进行标准化打包。容器与虚拟机有什么区别呢?

From Docker to Kubernetes(一)-  Image And Container

容器是在应用层面进行隔离,而虚拟机是在物理资源层面进行隔离。

二、下载和安装Docker

关于Docker Desktop的安装说明,请参考在Mac上安装Docker Desktop和在Windows上安装Docker Desktop。

三、Docker镜像

Docker镜像包括Ubuntu镜像、CentOS镜像和Debian镜像,这些都是基础镜像。

From Docker to Kubernetes(一)-  Image And Container

Docker镜像是文件和元数据的集合,镜像是分层的,每一层可以添加或删除文件,从而形成一个新的镜像。不同的镜像可以共享相同的层,镜像本身是只读的。安装完成后启动Docker。

sudo systemctl start docker
登录后复制

查看Docker版本:

docker version
登录后复制

查看镜像列表:

sudo docker image ls
登录后复制

获取镜像:

在获取镜像之前,先给用户授权,输入Docker命令前不需要再加sudo。

sudo groupadd docker
sudo gpasswd -a vagrant docker
# 重启Docker服务
sudo service restart docker.service
# 退出客户端
exit
# 重连客户端
vagrant ssh
# 查看Docker版本
docker version
登录后复制

从Docker Hub中拉取镜像,Docker Hub类似于GitHub,上面保存了各种构建后的镜像,可以通过docker pull命令直接拉取镜像。

docker pull ubuntu:14.04
docker pull bitnami/wordpress
登录后复制

构建一个Docker镜像:

从零构建一个镜像,首先拉取hello-world镜像并运行该镜像。

docker pull hello-world
docker run hello-world
登录后复制

hello-world镜像运行后会打印出hello world,然后自动退出。制作一个hello-world镜像,首先准备一个.c文件。

#include<stdio.h>
int main(){
  printf("Hello,Docker;This is your first Image\n")
}
登录后复制

接着在Docker命令行中开始制作hello-world镜像。

mkdir hello-world
cd hello-world
# 创建一个C文件,内容见下一个代码块
vi hello.c
# 编译二进制文件
# 首先安装工具
sudo yum install gcc
sudo yum install glibc-static
gcc -static hello.c -o hello
# 执行程序
./hello
# 创建Dockerfile,内容见Dockerfile代码块
vim Dockerfile
# 构建镜像
docker build -t jingnan/hello-world .
# 查看镜像
docker images
# 查看镜像分层
docker history jingnan/hello-world
# 运行容器
docker run jingnan/hello-world
登录后复制

Dockerfile内容:

FROM scratch
ADD hell0 /
CMD ["/hello"]
登录后复制

四、Docker容器

Docker容器是通过Docker镜像创建的,在镜像层上建立一个可读写的容器层。镜像负责应用的存储和分发,而容器负责运行应用。两者的关系就像面向对象中的类和实例,一个镜像可以启动多个容器,但容器名称不能相同。容器命令:

# 列举正在运行的容器,也可以使用docker ps
docker container ls
# 列举出所有的容器,包含已经退出的容器
docker ps -a
docker container ls -a
# 运行容器,运行之后会立即退出
docker run centos
# 查看容器列表,不包含刚刚运行的centos
docker container ls
# 交互式运行容器,添加参数 -it 进入到容器中,可以在容器中进行操作
docker run -it centos
# 再次查看running的容器,包含了centos
docker container ls
# 删除容器,可以只写部分ID
docker container rm <containerid>
# 删除所有容器,-q参数表示只列举出ID
docker container rm $(docker ps -a -q)
# 列举已经退出的容器
docker container ls -f "status=exited" -q
# 删除已经退出的容器
docker rm $(docker container ls -f "status=exited" -q)
# 删除镜像
docker image rm <imageid>
登录后复制

容器操作:停止、删除、运行

exec:exec表示对容器执行一个命令,exec /bin/bash 表示进入容器中,查看运行状态。

--name: 创建容器时,给容器一个自定义的名字。

inspect:显示容器的详细信息。

logs: 查看容器产生的日志。

一键抠图
一键抠图

在线一键抠图换背景

一键抠图30
查看详情 一键抠图
# 启动容器
docker start d7
# 执行 /bin/bash,进入交互界面
docker exec -it d7 /bin/bash
exit
# 执行python命令,进入python shell界面
docker exec -it d7 python
exit()
# 执行查看ip的命令
docker exec -it d7 ip a
docker stop d7
docker rm $(docker ps -a -a)
# 重新创建一个新的容器,并添加--name参数,给容器一个自定义的名字
docker run -d --name=demo jingnanjia/flash-hello-world
docker inspect
docker logs
登录后复制

构建私人Docker镜像:

首先认识两个命令:

# 基于容器,做了一些改变,如安装一些软件,再创建一个新的镜像
docker container commit
# 从Dockerfile build一个Image,从基础Image开始
docker container build
登录后复制

COMMIT实践:基于centos容器构建一个新的镜像。

docker image ls
# 运行centos,并进入centos交互界面
docker run -it centos
# 对centos容器做一些更改,安装vim,并退出
yum install vim
exit
# 将container构建成一个镜像,stupefied_hertz是容器的名字,stupefied_hertz是新镜像的名字
docker commit stupefied_hertz jingnan/centos-vim
# 查看镜像构建历史
docker history jingnan/centos-vim
登录后复制

Dockerfile实践:

mkdir docker-centos-vim
cd docker-centos-vim
vim Dockerfile
# 构建镜像,构建过程中会生成一个临时Container,在临时Container做了操作后再build
docker build -t jingnan/centos-vim-new .
# 查看镜像列表
docker images
登录后复制

Dockerfile内容:

FROM centos
RUN yum install -y vim
登录后复制

Dockerfile之FROM关键字的语法:

FROM是Dockerfile最开头的语法,FROM scratch表示从0开始构建一个镜像,FROM尽量使用官方的镜像。

Dockerfile之LABEL关键字的语法:

LABEL类似代码中的注释,如:

LABEL maintainer="stark@stark-industry.com"
LABEL version="mark-50"
LABEL description="This is description"
登录后复制

Dockerfile之RUN关键字语法:

RUN表示运行一些命令,每执行一次RUN,镜像都会增加一层,如果需要执行多条命令使用&&连接两条命令,命令过长使用\换行。

RUN yum update && yum install -y vim python-dev
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
登录后复制

Dockerfile之WORKDIR关键字语法:

WORKDIR作用是设定当前工作目录,要尽量使用绝对目录。

WORKDIR /root
WORKDIR /test # 如果没有则会自动创建
登录后复制

Dockerfile之ADD、COPY:

将本地文件添加到镜像文件里面,COPY由于ADD,ADD还可以解压。

ADD hello /
COPY hello test/
登录后复制

Dockerfile之ENV:

ENV命令用来设置常量。

ENV MYSQL_VERSION 8.0
登录后复制

ENTRYPOINT语法实践:

mkdir cmd_vs_entrypoint
cd cmd_vs_entrypoint
# dockerfile内容如下
vim Dockerfile
docker build -t jingnan/centos-entrypoint-shell .
docker images
# 运行镜像,打印出hello Docker
docker run jingnan/centos-entrypoint-shell
# 修改为EXEC格式
docker build -t jingnan/centos-entrypoint-exec .
docker images
# 打印出 hello $name
docker run jingnan/centos-entrypoint-exec
# 修改Dockerfile,再次build
vim Dockerfile
docker build -t jingnan/centos-entrypoint-exec-new .
docker run jingnan/centos-entrypoint-exec-new
登录后复制

Shell格式的Dockerfile:

FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
登录后复制

EXEC格式的Dockerfile,exec格式无法识别$name:

FROM centos
ENV name Docker
ENTRYPOINT ["/bin/echo", "hello $name"]
登录后复制

修改exec格式Dockerfile:

FROM centos
ENV name Docker
ENTRYPOINT ["/bin/bash", "-c", "echo hello $name"]
登录后复制

五、Docker镜像发布

镜像发布实践:首先要有Docker Hub的用户名密码。

# 输入Docker Hub用户名密码
docker login
# push的镜像的命名一定包含Docker Hub用户名
docker push jingnanjia/hello-world
# 删除本地镜像,再从Docker Hub上拉取自己的镜像
docker rmi jingnanjia/hello-world
docker pull jingnanjia/hello-world
登录后复制

这样发布镜像没有镜像构建构成,镜像是否安全大家都不清楚。

推荐的发布方式:分享Dockerfile。

构建一个私有的Docker Hub,没有图形界面,可以通过REST API验证镜像是否上传成功。

docker run -d -p 5000:5000 -restart always --name registry registry:2
# 构建可以上传到私有仓库的镜像,镜像tag必须是ip:port/name
docker build -t 101.133.232.238:5000/hello-world .
# 信任私有仓库配置
sudo ls /etc/docker
# { "insecure-registries":["101.133.232.238:5000"] }
vim /etc/docker/daemon.json
# 添加一行 EnvironmentFile=-etc/docker/daemon.json
sudo vim /lib/systemd/system/docker.service
sudo service docker restart
docker push 101.133.232.238:5000/hello-world
登录后复制

成功推送到私有仓库。

以上就是From Docker to Kubernetes(一)- Image And Container的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号