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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 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



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
413 100
|
4月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
341 99
|
4月前
|
缓存 Docker 容器
优化Docker镜像大小的五个实用技巧
优化Docker镜像大小的五个实用技巧
400 98
|
4月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
9月前
|
Docker 容器 Perl
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
1871 32
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
576 5
|
4月前
|
Java Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
228 8
|
5月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
377 16
|
6月前
|
Docker 容器 应用服务中间件
Docker 客户端是如何拉取镜像的?
Docker客户端拉取镜像的过程遵循Docker Registry HTTP API V2规范,主要分为解析镜像名、鉴权、获取Manifest、拉取Layers及本地合并五个步骤。它与Docker Hub、Harbor等仓库通信,确保镜像正确下载和构建。
1050 59
|
5月前
|
运维 关系型数据库 数据库
应用官方 Docker 镜像已成熟,团队为何转向 Websoft9 而不再依赖 Bitnami
随着云原生发展,部署工具从 Bitnami 转向 Websoft9。后者基于官方镜像,提供多应用编排与统一运维,提升部署效率与维护能力,适合多系统协同场景。
应用官方 Docker 镜像已成熟,团队为何转向 Websoft9 而不再依赖 Bitnami