五、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文件分为四部分:
- 基础镜像信息。
- 维护者信息
- 镜像操作指令。
- 容器启动时执行指令。
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