💖5分钟带你自定义镜像和安装软件💖Docker系列入门教程

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像。

五、Docker安装软件


5.1、Docker安装MySQL


拉取镜像

# 安装的是 mysql 8.0
docker pull mysql:latest
复制代码


启动容器

# -e是指定环境变量
docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
复制代码


进入容器

# 这里的容器id要根据实际情况替换
docker exec -it 3e8bf7392b4e bash
复制代码


登录 MySQL

mysql -u root -p
复制代码


修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
复制代码


授权远程登录访问

CREATE USER 'wkcto'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; 
GRANT ALL PRIVILEGES ON *.* TO ' wkcto'@'%';
复制代码


5.2、Docker安装Nginx


拉取镜像

docker pull nginx
复制代码


启动容器

docker run -d -p 80:80 nginx
复制代码


进入容器

# 这里的容器id要根据实际情况替换
docker exec -it 3e8bf7392b4e bash
复制代码


5.3、 Dokcer安装Zookeeper


拉取镜像

docker pull zookeeper
复制代码


启动容器

docker run -p 2181:2181 -d zookeeper
复制代码


进入容器

# 这里的容器id要根据实际情况替换
docker exec -it 3e8bf7392b4e bash
复制代码


六、Docker 自定义镜像


6.1、认识 Dockerfile文件


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 Dockerfile 用于构建 Docker 镜像,Dockerfile 文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像。


6.2、Dockerfile的基本结构


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 我们一般把Dockerfile文件分为四部分:


  1. 基础镜像信息。
  2. 维护者信息
  3. 镜像操作指令。
  4. 容器启动时执行指令。


6.3、Dockerfile指令


6.3.1、FROM


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。


Dockerfile 文件的第一条指令必须为 FROM 指令。并且,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令(每个镜像一次),他所指定的镜像比如是已经存在的镜像,我们称为基础镜像,语法格式:


FROM 镜像名称
# 或者是
FROM 镜像名称:版本号
复制代码


6.3.2、MAINTAINER


用于指定作者信息,语法格式为:


MAINTAINER 作者名称
复制代码


6.3.3、RUN


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行。每个RUN命令都会在当前镜像的上层创建一个新的镜像来运行指令,语法格式为:


RUN 需要执行的命令
# 示范
RUN echo xiaolin
复制代码


6.3.4、EXPOSE


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 指定运行该镜像的容器使用的端口,虽然我们在构建镜像的时候暴露了端口号,但是我们在运行容器的时候依然需要指定端口的映射。 我们使用EXPOSE只是告诉Docker运行该镜像的容器会使用80端口,出于安全的考虑,Docker并不会打开该端口,所以我们需要在使用该镜像运行容器的时候指定端口的映射。语法格式为:


EXPOSE 端口号
复制代码


6.3.5、CMD


   Docker 仓库的概念跟 Git 类似,注册服务器也类似于 GitHub 这样的托管服务。 CMD指令提供容器默认运行的命令,RUN指令类似.都是执行一个命令。但是RUN命令指定的命令是在镜像构建的过程运行的,CMD的命令是在容器运行的时候运行的。     如果我们在docker run命令中指定运行的命令的时候,CMD的指令会被覆盖,默认命令就不会执行。


6.3.6、ENTRYPOINT


   这个命令和1CMD指令十分相似,他和RUN指令不同的是,他不会被docker run的启动命令给覆盖。


6.3.7、ADD


   将文件和目录复制到使用dockerfile构建的镜像中,目标的来源可以本地的地址也可以是远程地址.。


   如果是本地地址,本地地址必须是构建目录中的相对地址。对于远程URL,docker并不推荐使用,更建议使用的是curl或者wget的命令来获取,目标路径需要指定镜像中的绝对路径。


6.3.8、VOLUME


   用于基于镜像创建的容器添加卷,一个卷可以存在一个或者多个容器的特定目录。这个目录可以绕过联合文件系统.提供共享数据和持久化数据的功能。


6.3.9、WORKDIR


   这个指令是从指令创建一个容器,在容器内部设置工作目录。ENTRYPOINT和CMD的命令都会在这个目录下执行,我们也可以使用这个命令给后续的构建中指定工作目录。通常会使用绝对路径,如果使用了相对路径,那这个路径会一致传递下去。


6.3.10、USER


       指定镜像会以什么样的用户去运行,如果没有指定USER,容器会使用root用户来运行。语法格式:


USER xiaolin
复制代码


6.3.11、ONBUILD


   镜像触发器,当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令。


6.3.12、ENV


   这个指令主要是来设置环境变量,这个环境变量在构建过程中和运行过程中都有效。比如配置JDK环境:


ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
复制代码


6.4、使用DockerFile自定义镜像


我们创建存放Dockerfile文件的目录和Dockerfile文件

编写Dockerfile文件

from centos:latest
maintainer xiaolin
RUN yum install -y epel-release
RUN yum install -y nginx
EXPOSE 80
复制代码


使用build命令构建镜像

docker build -t 'nginx_mirror' .
复制代码


通过镜像构建容器

# -p 80后面接的是你build的时候指定的名字
docker run -itd --name nginx_env1 -p 80 nginx_mirror



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 安全 持续交付
【Docker 专栏】Docker 镜像的版本控制与管理
【5月更文挑战第9天】本文探讨了Docker镜像版本控制与管理的重要性,包括可重复性、回滚能力、协作开发和持续集成。常用方法有标签、构建参数和版本控制系统。管理策略涉及定期清理、分层管理和镜像仓库。语义化标签、环境变量和配置文件在版本控制中有应用。版本系统与Docker结合能跟踪历史和促进协作。注意点包括优化镜像大小、确保安全性和兼容性。案例分析和未来趋势展示了持续发展的镜像管理技术,为Docker应用的稳定与进步保驾护航。
【Docker 专栏】Docker 镜像的版本控制与管理
|
3天前
|
Docker 容器
docker从指定repo拉取镜像
docker从指定repo拉取镜像
|
1天前
|
存储 Linux Docker
CentOS7修改Docker容器和镜像默认存储位置
CentOS7修改Docker容器和镜像默认存储位置
|
3天前
|
存储 安全 开发者
如何删除 Docker 镜像、容器和卷?
【5月更文挑战第11天】
19 2
如何删除 Docker 镜像、容器和卷?
|
3天前
|
运维 安全 Docker
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
【5月更文挑战第9天】Docker技术在软件开发和部署中带来便利,但其镜像安全问题不容忽视。本文探讨了Docker镜像安全扫描与漏洞修复,强调了镜像安全对应用和系统的重要性。文中介绍了静态和动态扫描方法,列举了软件漏洞、配置漏洞和恶意软件等常见安全问题,并提到了Clair和Trivy等扫描工具。修复策略包括更新软件、调整配置和重建镜像。此外,加强安全意识、规范镜像制作流程和定期扫描是管理建议。未来,将持续面对新的安全挑战,需持续研究和完善安全技术。
【Docker 专栏】Docker 镜像安全扫描与漏洞修复
|
3天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
3天前
|
Java Linux 数据安全/隐私保护
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
Docker自定义JDK镜像并拉取至阿里云镜像仓库全攻略
|
3天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
3天前
|
存储 缓存 运维
【Docker 专栏】Docker 镜像的分层存储与缓存机制
【5月更文挑战第8天】Docker 镜像采用分层存储,减少空间占用并提升构建效率。每个镜像由多个层组成,共享基础层(如 Ubuntu)和应用层。缓存机制加速构建和运行,通过检查已有层来避免重复操作。有效管理缓存,如清理无用缓存和控制大小,可优化性能。分层和缓存带来资源高效利用、快速构建和灵活管理,但也面临缓存失效和层管理挑战。理解这一机制对开发者和运维至关重要。
【Docker 专栏】Docker 镜像的分层存储与缓存机制
|
3天前
|
数据库 Docker 容器
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像
【5月更文挑战第8天】Dockerfile是构建Docker镜像的关键,它包含一系列指令,用于描述应用运行环境及所需软件包。通过自动化构建,能提高效率、保证可重复性并提升灵活性。确定基础镜像、安装依赖、设置环境后,执行Dockerfile生成镜像,用于应用程序部署。虽然需要熟悉Docker技术和应用细节,但其带来的益处使其成为现代软件开发和部署的重要工具。
【Docker 专栏】使用 Dockerfile 自动化构建 Docker 镜像