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

初步学习,可能有些地方理解有问题,欢迎指正!

posted @   浪迹天涯的派大星  阅读(3179)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示