docker 的 Dockerfile 简单使用

时间:2024-01-22 20:48:56

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

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

#桌面系统 推荐 deepin和mint

附件下载  有道云笔记

下面是编译一个新镜像 更新系统 安装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文件

# 基于 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 表示安装用于启动容器自启动服务

# 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"]
#----------------------------
# 基于 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 文件的目录 执行 

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

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

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

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