docker构建基础镜像(学习笔记)
记录一下自己学习docker的历程,方便后面查阅。
自己的理解,docker需要运行在Linux环境中,可以是cent os也可以是ubuntu,然后在docker里面可以制作多个镜像,镜像其实就相当于是一个静态只读文件,制作的镜像可以由多种环境和组件组成,例如,ubuntu的基础镜像,并在镜像里安装jdk、mysql等等,那么我们可以将ubuntu和jdk打成一个镜像,后面可以直接读取使用,docker里面可以运行多个容器,每个容器里面可以运行一个镜像,因为容器已经是一个很小的单元了,所以尽可能的使制作的镜像功能单一一点,相当于尽可能每个容器中运行一个微服务,容器彼此间不会受到直接影响。
1、环境
本地安装虚拟机VMware Workstation 16 player(版本16.2.3),虚拟机里面装的是ubuntu 22.04 desktop amd64,搭建了一个基本的Linux环境,具体的安装步骤,网上很多,也不是本文的重点,就不多说了。
2、docker安装
如果已经安装,可以先卸载之前旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
具体的安装,可以参考菜鸟教程-Docker安装 (这个菜鸟教程的涉及到的基础知识点非常丰富,步骤也很细致,可以当做一个查询网站),也可以参考官方文档 ,基本上差不多,唯一有点疑惑的地方就是那个设置官方的GPG key。
3、docker常用命令
记录了一下自己在使用过程中常用的docker命令,菜鸟教程-docker命令大全 基本的命令都有,下面记录下自己的使用例子。
1、在安装完docker后,需要拉取一个基本的镜像,后面会在这个基本的镜像上制作自己的镜像。
docker pull ubuntu
默认拉取最新的ubuntu版本,也可以搜索特定的版本,search有不少的参数,比如过滤条件、默认展示数量等等,具体可以网上
docker search ubuntu
2、查看镜像列表
docker images
3、查看容器列表
docker ps -a
4、 运行镜像,--name是容器名称,-d后台运行,-p是端口映射,-v是文件挂载(将宿主机上的文件/文件夹和docker容器内的文件/文件夹对应),ubuntu_jdk8u202是运行的镜像的名称,-it一般一起使用,可以保持容器一直运行,因为容器内至少需要存在一个进程在能运行,所以默认是运行bash。
docker run -it --name ubuntujdk8 -d -p 8081:8081 ubuntu_jdk8u202
5、容器运行起来后,进入到容器里面。-it同上,6402b3a80638是容器id,/bin/bash的作用,让我们可以在支持/bin/bash脚本的容器中执行相应命令,相当于登录到容器内部,可以通过shell和这个容器即ubuntu交互,可以执行各种Linux命令了
docker exec -it 6402b3a80638 /bin/bash
6、从宿主机复制文件到docker,/home/download/jdk-8u202-linux-x64.tar.gz 是宿主机的文件地址,6402b3a80638:/home/jdk 是目标容器的id和容器内的文件夹地址,通过冒号分隔开
docker cp /home/download/jdk-8u202-linux-x64.tar.gz 6402b3a80638:/home/jdk
7、快速制作镜像。例如我们在一个基础镜像的容器中安装了一些其他的组件,比如jdk,此时这个命令就是将正在运行的这个容器制作成一个镜像,但是这种不方便管理,不知道镜像里面具体有哪些东西,不太直观。
docker commit 6402b3a80638 ubuntu_jdk8
8、dockerfile文件制作镜像,touch命令创建一个Dockerfile文件,然后vim编辑文件
# 建立一个新的镜像文件,配置模板:新建立的镜像是以ubuntu:latest(镜像名称)为基础模板 # 因为jdk必须运行在操作系统之上 FROM ubuntu:latest # 维护者 MAINTAINER author <xxxx@xx.com> # 创建一个新目录来存储jdk文件 RUN mkdir /usr/local/java #将jdk压缩文件复制到镜像中,它将自动解压缩tar文件 ADD jre-8u202-linux-x64.tar.gz /usr/local/java/ # 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 设置环境变量 ENV JAVA_HOME /usr/local/java/jre1.8.0_202 ENV PATH $JAVA_HOME/bin:$PATH # VOLUME 指定了临时文件目录为/tmp # 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp VOLUME /tmp
9、#构建镜像(-t 指定构建镜像的名称),后面的 . 表示在当前目录读取Dockerfile文件
docker build -t ubuntujdk8 .
10、停止容器,stop后面可以是容器id,也可以是容器名称
docker stop ubuntujdk8u202
11、删除容器,rm是删除容器,rmi是删除镜像,后面可以是容器id或者名称
docker rm ubuntujdk8u202
12、删除镜像(如果删除不了,需要先停止并删除运行该镜像的容器)
docker rmi ubuntujdk8
初步学习,可能有些地方理解有问题,欢迎指正!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」