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 设置容器密码

相关推荐
倔强的石头10613 分钟前
【Linux指南】文件系统基础操作与路径管理
linux·运维·服务器
TDengine (老段)1 小时前
TDengine 快速体验(Docker 镜像方式)
大数据·数据库·物联网·docker·时序数据库·tdengine·涛思数据
中科三方1 小时前
如何通过DNS解析实现负载均衡?有哪些优势?
运维·负载均衡
安科瑞刘鸿鹏1 小时前
双碳时代,能源调度的难题正从“发电侧”转向“企业侧”
大数据·运维·物联网·安全·能源
小呆瓜历险记1 小时前
ubuntu 22.04搭建SOC开发环境
linux·运维·ubuntu
码农101号2 小时前
Linux中shell流程控制语句
linux·运维·服务器
水水沝淼㵘2 小时前
嵌入式开发学习日志(数据库II && 网页制作)Day38
服务器·c语言·网络·数据结构·数据库·学习
ajassi20002 小时前
开源 java android app 开发(十二)封库.aar
android·java·linux·开源
程序猿小D2 小时前
第26节 Node.js 事件
服务器·前端·javascript·node.js·编辑器·ecmascript·vim
聪明小萝卜2 小时前
无法与IP建立连接,未能下载VSCode服务器
运维·服务器