Docker的安装
安装
Docker安装步骤的官网地址:https://docs.docker.com/install/linux/docker-ce/ubuntu/
第一步:配置yum仓库
yum install -y yum-utils
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
第二步:开始安装
yum install -y docker-ce docker-ce-cli containerd.io
第三步:验证docker是否安装成功
docker -v #查看docker的版本信息
第四步:启动Docker
systemctl start docker
配置镜像仓库
docker默认的镜像仓库地址是https://hub.docker.com,由于该地址服务器不在内地,访问的速度可能会有一定的影响。所以我们会经常将docker默认的镜像仓库换成阿里巴巴或者163的镜像仓库地址,以便加快我们的访问速度。
第一步:在 /etc/docker/目录下是没有 daemon.json文件的,要进入到 /etc/docker/ 目录下执行 touch daemon.json 命令创建 daemon.json文件
# 进入到 /etc/docker/ 目录下
cd /etc/docker
# 执行 touch daemon.json命令创建 daemon.json文件
touch daemon.json
第二步:在daemon.json文件中加入如下内容
{
"registry-mirrors": ["https://zbhswmwr.mirror.aliyuncs.com"]
}
第三步:执行如下命令
sudo systemctl daemon-reload #重新加载守护进程
sudo systemctl restart docker #重启docker
Docker的使用
1、Docker拉取镜像
docker pull 镜像名:版本号
2、Docker运行镜像——安装容器
# -i UI交互的意思,-t 终端的意思,-d 以守护进程的方式让终端交互界面在后台运行,是docker pull 和docker create的合并
# 如果不以守护进程的方式让终端交互界面在后台运行,docker引擎觉得容器没事儿干,会自动将容器关闭掉
# -p 宿主机端口:容器端口 将容器内部端口映射到宿主机的端口,访问宿主机端口就像是在访问容器端口
# -v 宿主机目录或文件:容器目录或文件 创建数据卷[相当于是在容器上开了一个口子,宿主机可以通过这个口操作容器中对应的目录或文件]
docker run -i -t -d -p 宿主机端口:容器端口 -v 宿主机目录或文件:容器目录或文件 /bin/bash
3、Docker进入容器
# 打开一个终端进入/重新进入'容器'
docker exec -i -t 容器ID /bin/bash
4、Docker查看所有的镜像
docker images
5、Docker移除镜像
docker rmi dcoker 镜像ID
6、Docker查看所有的容器
# -a查看所有的容器,如果不加,只会查看到正在运行的容器
# -q只查看容器的id
docker ps -a
7、Docker关闭正在运行的容器
# $(docker ps q)表示在docker执行stop/kill命令前先执行$(docker ps -q)查看所有正在运行的容器的id的命令
# docker kill 容器id/容器name 容器id/容器name 容器id/容器name ...
docker stop $(docker ps -q)
或者
docker kill $(docker ps -q)
8、Docker启动一个已经关闭的容器
docker start 容器名或容器id
9、Docker移除容器(只能移除已经关闭的)
# 移除所有已经关闭的容器
# $(docker ps -aq)表示在docker执行rm命令前先执行$(docker ps -aq)查看所有容器的id的命令
docker rm $(docker ps -aq)
# 移除指定的已经关闭的容器
docker rm 容器id/容器name 容器id/容器name 容器id/容器name ...
10、Docker将宿主机文件拷贝到容器中
docker cp 本地文件目录 容器ID:/路径
11、查看容器运行中产生的日志
docker logs -f 容器id
/# 查看日志,也可通过tail -f /var/lib/docker/containers/容器id/容器id.json.log
12、Docker查看容器分配的ip
docker inspect 容器名
Docker-file的使用
Dockerfile是构建镜像的文件,镜像是通过Dockerfile做出来的,描述的是镜像是由什么东西一步步构成的,是镜像的描述文件
Dockerfile的基本语法(示例)
# 基础镜像来自于哪个个镜像
FROM centos:7
# 作者信息
MAINTAINER 1064336228@qq.com
# 执行创建文件夹命令
RUN mkdir -p /data/jdk
RUN mkdir -p /data/tomcat
# 将宿主机中的文件复制到容器中,注意:文件需要和Dockerfile在同一个目录下
COPY ./jdk-8u381-linux-x64.tar.gz /data/packge/
# 执行解压命令
RUN tar -zxvf /data/packge/jdk-8u381-linux-x64.tar.gz -C /data/
RUN mv /data/jdk1.8.0_381/* /data/jdk/
RUN rm -rf /data/jdk1.8.0_381
# 配置环境变量
ENV JAVA_HOME=/data/jdk
ENV PATH=$JAVA_HOME/bin:$PATH
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN java -version
# 将宿主机中的文件复制到容器中,注意:文件需要和Dockerfile在同一个目录下
COPY ./apache-tomcat-8.5.75.tar.gz /data/packge/
# 执行解压命令
RUN tar -axvf /data/packge/apache-tomcat-8.5.75.tar.gz -C /data/
RUN mv /data/apache-tomcat-8.5.75/* /data/tomcat/
RUN rm -rf /data/apache-tomcat-8.5.75
# 暴露端口
EXPOSE 8080
# 创建数据卷
VOLUME /data/tomcat/webapps /data/tomcat/webapps
# 指定容器启动时的默认命令,CMD 在docker run 时运行
# 最终会执行的命令:/data/tomcat/bin/catalina.sh run
# CMD ["<可执行文件或命令>","<param1>","<param2>",...]
CMD ["/data/tomcat/bin/catalina.sh","run"]
如上代码所示,FROM、MAINTAINER、RUN、WORKDIR、CMD均为关键字,按照标准的规范需要大写;FROM centos表示基础镜像是centos,然后会启动centos这个容器,执行第二行代码又会生成新的镜像文件,然后提交,周而复始。
关键字 | 含义 |
---|---|
FROM | 指定基础镜像,用于后续的指令构建(每一个镜像都必须建立在一个基础镜像的基础上) |
MAINTAINER | 指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令) |
LABEL | 添加镜像的元数据,使用键值对的形式 |
RUN | 在构建过程中在容器中所要执行的Linux命令 |
EXPOSE | 声明容器运行时监听的特定网络端口 |
ENV | 在容器内部设置环境变量 |
ADD | 将文件、目录或远程URL复制到镜像中(将文件拷贝到镜像中并解压、删除) |
COPY | 将文件或目录复制到镜像中(将文件拷贝到镜像中,没有解压、删除的功能) |
VOLUME | 为容器创建数据卷 |
WORKDIR | 进入到容器后进入到哪个目录 |
CMD | 容器启动时候执行的命令(可以被覆盖),CMD 在docker run 时运行 |
ENTRYPOINT | 设置容器创建时的主要命令(不可被覆盖) |
可参考:https://www.runoob.com/docker/docker-dockerfile.html
Docker-compose的使用
在开发一个应用的时候,我们需要其他的很多东西,例如数据库,nginx,网站应用等很多的环境,而docker又推崇的是每一个容器只运行一个进程,那么我们势必得很多的容器,那么我们得通过docker build命令一个个的构建镜像,然后在通过docker run命令启动一个个容器,那么当我们修改了应用后,我们又得去重复上面的操作。而且容器与容器之间存在着很多的依赖,我们在操作的时候还得去考虑先启动哪个容器,在启动另外一个容器,这些操作和步骤都得花上大量的精力。那么可以通过docker-compose一键式部署和启动容器。
docker-compose是一种容器编排技术,我们可以编写一个docker-compose.yml文件,在文件中编排好我们的服务,只用通过一个命令解决重复使用docker run命令一个个启动和创建容器。
安装docker-compose
第一步:运行如下命令获取最新版的docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 下载网址:https://github.com/docker/compose/releases
第二步:给二进制文件加上执行权限
chmod +x /usr/local/bin/docker-compose
第三步:在 /usr/bin 目录下的一个docker-compose命令的软连接
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
第四步:查看docker-compose版本
docker-compose --version
编写docker-compose文件
# 这个版本的值是依据 docker 的版本来的,参考地址: https://docs.docker.com/compose/compose-file/
version: '3.8'
# docker-compose认为每个容器是一个服务
services:
# elasticsearch是自定义的服务名
elasticsearch:
# 该容器对应的镜像
image: elasticsearch:7.17.3
# 宿主机端口和该容器端口的映射关系
ports:
- 9200:9200
- 9300:9300
# 启动容器时的环境变量
environment:
- 'discovery.type=single-node'
# 容器名称
container_name: elasticsearch
# 容器数据卷
volumes:
- /data/elasticsearch/analyzer:/usr/share/elasticsearch/plugins
kinaba:
image: kibana:7.17.3
ports:
- 5601:5601
environment:
- ELASTICSEARCH_HOSTS=["http://elasticsearch:9200"]
container_name: kibana
部分容器启动命令
1、Docker-MySQL
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=指定登录MySQL的密码 -d -p 宿主机端口(3306):容器端口(3306)
# MySql相关的文件在容器中的位置:
# MySql配置文件在容器中的位置:/etc/mysql/my.cnf
# Mysql数据文件在容器中的位置:/var/lib/mysql
2、Docker-redis
docker run --name redis-master -d -p 宿主机端口(6379):容器端口(6379) redis redis-server /usr/local/etc/redis/redis.conf
# Redis相关的文件在容器中的位置:
# Redis配置文件在容器中的位置:/usr/local/etc/redis/redis.conf
可参考:http://www.mobiletrain.org/about/BBS/131670.html
3、Docker-nginx
docker run --name nginx -p 80:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/static/:/data/nginx/static/ -v /data/nginx/logs/:/var/log/nginx/ -d nginx:latest
主机 docker
/data/nginx/static/html /usr/share/nginx/html #网页文件
/data/nginx/conf/nginx.conf /etc/nginx/nginx.conf#配置文件
/data/nginx/logs /var/log/nginx#日志文件