docker 的 Dockerfile 简单使用

#注意事项:容器内是否能正常使用防火墙取决于 你的宿主机和容器是否是同一种系统

#服务器系统 推荐使用 almalinux 容器镜像下载 docker pull almalinux:8.8

#桌面系统 推荐 deepin和mint

附件下载 有道云笔记

bash 复制代码
下面是编译一个新镜像 更新系统 安装ssh 以及提升容器权限
FROM ubuntu:22.04 表示依赖那个版本创建镜像
MAINTAINER i8520 表示作者信息
COPY 的使用 $HOME/桌面/123文件或文件夹 复制到镜像里的/data
COPY $HOME/桌面/123 /data
ENV NAME_A="123" 表示变量全局可用 Dockerfile文件内 或者镜像里
RUN apt update && apt upgrade -y 表示执行系镜像更新
RUN echo '123' > /home/123.txt 执行一条命令把 123添加到镜像中的 /home/123.txt
RUN apt install -y init 表示安装用于启动容器自启动服务
CMD ["/sbin/init"] 表示系统 参数 提权的,默认是 CMD ["/bin/bash"]

使用 apt 包管理的 Linux发行版 把下面代码保存在Dockerfile文件

bash 复制代码
# 基于 ubuntu:20.04
####################################################
# --no-cache 表示不缓存
# -t ubuntubt:1.0 表示镜像名字ubuntubt版本1.0
# docker build --no-cache -t ubuntubt:1.0 .
#---------------------------------------------------
# 使用 distrobox 创建镜像,MYubuntuBT是镜像名字
# distrobox create --image ubuntubt:1.0 MYubuntuBT
#---------------------------------------------------
# 进入 MYubuntuBT容器
# distrobox enter MYubuntuBT
#---------------------------------------------------
# 在容器执行这条命令 把程序快捷启动发送到开始菜单,AppName程序名字
# distrobox-export --app AppName
#---------------------------------------------------
# COPY dac /data
# 如果是文件就会复制到镜像里的/data 如时文件夹就会把dac里的文件复制到/data
####################################################
FROM ubuntu:20.04
MAINTAINER 酷谷的谷子
ENV PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
RUN export PATH=$PATH
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN apt update  -y && apt upgrade -y && apt install -y 'apt-file' && 'apt-file' update
RUN apt install -y iproute2 net-tools iputils-ping libsasl2-dev init openssh-server \
vim libc-ares2 sudo p7zip-full curl zip unzip wget libcurl4-openssl-dev expect \
libdatrie1 libnss3 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 \
libfuse2 psmisc fuse libxml2-dev openssl* libcurl4-openssl-dev pkg-config \
fonts-wqy-microhei fonts-wqy-zenhei fonts-arphic-ukai fonts-arphic-uming \
fontconfig xfonts-utils language-pack-zh-hans autoconf g++ make openssl libssl-dev 
COPY SR /
RUN /bin/bash -c "\
mv /MYStart /bin;chmod -R 755 /bin/MYStart;mkdir -p /usr/share/fonts/my_fonts;\
mv /simsun.ttc /usr/share/fonts/my_fonts;cd /usr/share/fonts/my_fonts;\
mkfontscale;mkfontdir;fc-cache -fv;/bin/MYStart"
CMD ["/bin/bash"]

使用 yum 包管理的 Linux发行版把下面代码保存在Dockerfile文件

RUN rpm --rebuilddb && yum install initscripts 表示安装用于启动容器自启动服务

bash 复制代码
# centos
FROM centos:centos7.9.2009
MAINTAINER 酷谷的谷子
RUN rpm --rebuilddb && yum update -y && yum upgrade -y
RUN rpm --rebuilddb && yum install initscripts wget passwd openssl openssh-server -y
RUN rpm --rebuilddb && yum -y install zip unzip p7zip p7zip-plugins curl
RUN rpm --rebuilddb && yum -y fontconfig mkfontscale
RUN echo '123' > /home/123.txt
CMD ["/usr/sbin/init"]
bash 复制代码
#----------------------------
# 基于 Almalinux 8.8 容器制作
# docker build .
#----------------------------
FROM almalinux:8.8
MAINTAINER 酷谷的谷子
#----------------------------
# 更新系统安装 SSH 
#----------------------------
RUN yum update -y
RUN yum upgrade -y
RUN yum install initscripts wget passwd openssl openssh-server fontconfig mkfontscale -y
#----------------------------
# 安装防火墙
#----------------------------
RUN yum -y install firewalld iptables
RUN systemctl enable  firewalld
#----------------------------
# 配置 ssh 
#----------------------------
ENV SSH_A="#Port 22"
ENV SSH_A_A="Port 22"
ENV SSH_B="#AddressFamily any"
ENV SSH_B_B="AddressFamily any"
ENV SSH_C="#ListenAddress 0.0.0.0"
ENV SSH_C_C="ListenAddress 0.0.0.0"
ENV SSH_D="#PermitEmptyPasswords no"
ENV SSH_D_D="PermitEmptyPasswords yes"
RUN sed -i -r "s|${SSH_A}|${SSH_A_A}|g" /etc/ssh/sshd_config
RUN sed -i -r "s|${SSH_B}|${SSH_B_B}|g" /etc/ssh/sshd_config
RUN sed -i -r "s|${SSH_C}|${SSH_C_C}|g" /etc/ssh/sshd_config
RUN sed -i -r "s|${SSH_D}|${SSH_D_D}|g" /etc/ssh/sshd_config
RUN systemctl enable sshd.service
#----------------------------
# 系统参数 提权的
# 正常情况 CMD ["/bin/bash"]
#----------------------------
CMD ["/usr/sbin/init"]

使用方式:cd 到存有Dockerfile 文件的目录 执行

bash 复制代码
#ubuntux镜像名字版本1.0
# -t ubuntubt:1.0  
#编译镜像时不保存缓存
# --no-cache
docker build --no-cache -t ubuntubt:1.0 .

给刚才编译的镜像 取个名字 先查看一下当前本地镜像 docker images

给刚才编译的镜像创建容器

bash 复制代码
#docker images
#容器的名字
CONTAINER_NAME="MHZX-SR"
#刚才创建镜像修改的名字
NEW_IMAGES_NAME="new-ubuntu2204"
REPOSITORY_TAG_NAME="${NEW_IMAGES_NAME}:latest"
#映射到宿主机的端口
#PORT_A="-p 22886:1314 -p 22885:22"
PORT_A='--net=host'
#映射文件夹 宿主机${HOME}/data映射到容器/data
VOLUME_A="-v ${HOME}/data:/data"
VOLUME_B="-v ${HOME}/www:/www"
#提权 yum 包管理
#CMD_INI='/usr/sbin/init'
#提权 apt 包管理
CMD_INI='/sbin/init'
docker run  -d --name ${CONTAINER_NAME} ${PORT_A} \
--privileged=true ${VOLUME_A} ${VOLUME_B} ${REPOSITORY_TAG_NAME} ${CMD_INI}

启动动容器docker start 容器名称

进入容器docker exec -it 容器名称 /bin/bash

passwd root 设置容器密码

相关推荐
一可米14 分钟前
gitHub.com Actions自动化发布
运维·自动化·github
智塑未来1 小时前
证券公司智能运维平台哪个品牌做得好?擎创科技智能运维 2.0 适配券商全场景
运维·科技·区块链
2601_965798471 小时前
Is Hygia Good for Maid & Janitorial Sites? Technical Audit
服务器·网络·数据库
java_logo1 小时前
Docker 部署 CUPS Web:浏览器即可管理打印机与打印任务
docker·容器·打印机·轩辕镜像·cups web·cups web 镜像部署·cups web 部署教程
蚰蜒螟1 小时前
从内核源码看Linux启动:chroot、execve与MS_MOVE的协奏曲
linux·服务器·网络
影视飓风TIM2 小时前
Linux下C语言缓冲区原理 + Git版本控制
linux·c语言·git
来者皆善3 小时前
ZYNQ linux上使用 USB CDC ACM
linux·运维·服务器
4/5$全真龙门3 小时前
廉价易行的内网穿透
运维
数据知道3 小时前
容器安全入门:Docker 逃逸原理与 5 个经典 CVE
安全·网络安全·docker·容器
缓慢更新3 小时前
企业档案管理系统迁移实录:从文件服务器到智能检索引擎
运维·服务器