史上最详Docker讲解,安装部署一步到位

1.Docker安装

Docker镜像交流的社区: Docker Hub Container Image Library | App Containerization

1.1卸载旧版

首先如果系统中已经存在旧的Docker,则先卸载:

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

1.2.配置Docker的yum库

首先要安装一个yum工具

yum install -y yum-utils

安装成功后,执行命令,配置Docker的yum源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

1.3.安装Docker

最后,执行命令,安装Docker

yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

1.4.启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# Docker容器开机自启
docker update --restart=always [容器名/容器id]

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps

1.5.配置镜像加速

这里以阿里云镜像加速为例。

1.5.1.注册阿里云账号

首先访问阿里云网站:

阿里云-计算,为了无法计算的价值

1.5.2.开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务阿里云-计算,为了无法计算的价值阿里云-计算,为了无法计算的价值

具体命令如下:

# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

2.Docker入门

2.1.安装MySQL

首先,我们利用Docker来安装一个MySQL软件,大家可以对比一下之前传统的安装方式,看看哪个效率更高一些。

如果是利用传统方式部署MySQL,大概的步骤有:

  • 搜索并下载MySQL安装包

  • 上传至Linux环境

  • 编译和配置环境

  • 安装

而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

运行结果图

图解:

2.2.命令解读

利用Docker快速的安装了MySQL,非常的方便,不过我们执行的命令到底是什么意思呢?

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

解读:

  • docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行

  • --name mysql : 给容器起个名字叫mysql,你可以叫别的

  • -p 3306:3306 : 设置端口映射。

    • 容器是隔离环境,外界不可访问。但是可以宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。

    • 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。

    • 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口

  • -e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数

    • 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定

    • 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码

  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像

    • 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号

    • 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest

3.Docker基本命令

可参考官网文档: Use the Docker command line | Docker Docs

3.1.命令解读

其中,比较常见的命令有:

命令

说明

docker pull

拉取镜像

docker push

推送镜像到DockerRegistry

docker images

查看本地镜像

docker rmi

删除本地镜像

docker run

创建并运行容器(不能重复创建)

docker stop

停止指定容器

docker start

启动指定容器

docker restart

重新启动容器

docker rm

删除指定容器

docker ps

查看容器

docker logs

查看容器运行日志

docker exec

进入容器

docker save

保存镜像到本地压缩文件

docker load

加载本地压缩文件到镜像

docker inspect

查看容器详细信息

用一副图来表示这些命令的关系: 

3.2.安装Nginx

我们以Nginx为例

# 第1步,去DockerHub查看nginx镜像仓库及相关信息(略)

# 第2步,拉取Nginx镜像
docker pull nginx

# 第3步,查看镜像
docker images
# 结果如下:
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   16 months ago   141MB
mysql        latest    3218b38490ce   17 months ago   516MB

# 第4步,创建并允许Nginx容器
docker run -d --name nginx -p 80:80 nginx

# 第5步,查看运行中容器
docker ps

# 第6步,访问网页,地址:http://虚拟机地址

# 第7步,停止容器
docker stop nginx

# 第8步,查看所有容器
docker ps
# 第9步,再次启动nginx容器
docker start nginx

# 第10步,再次查看容器
docker ps 

# 第11步,查看容器详细信息
docker inspect nginx

# 第12步,进入容器,查看容器内目录
docker exec -it nginx bash
# 或者,可以进入MySQL
docker exec -it mysql mysql -uroot -p

# 第13步,删除容器
docker rm nginx
# 发现无法删除,因为容器运行中,强制删除容器
docker rm -f nginx

4.数据卷

数据卷(volume)是一个虚拟目录,是容器内目录宿主机目录之间映射的桥梁。

# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

  宿主机会自动创建容器同样的文件夹和文件

数据卷的相关命令有:

命令

说明

文档地址

docker volume create

创建数据卷

docker volume create

docker volume ls

查看所有数据卷

docs.docker.com

docker volume rm

删除指定数据卷

docs.docker.com

docker volume inspect

查看某个数据卷的详情

docs.docker.com

docker volume prune

清除数据卷

docker volume prune

 4.1.挂载本地目录或文件

可以发现,数据卷的目录结构较深,如果我们去操作数据卷目录会不太方便。在很多情况下,我们会直接将容器目录与宿主机指定目录挂载。挂载语法与数据卷类似:

# 挂载本地目录
-v 本地目录:容器内目录
# 挂载本地文件
-v 本地文件:容器内文件

 注意:本地目录或文件必须以 /./开头,如果直接以名字开头,会被识别为数据卷名而非本地目录名。

    在宿主机创建mysql文件夹在其中创建三个文件夹,分别放入文件

  • 挂载/root/mysql/data到容器内的/var/lib/mysql目录

  • 挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录(初始化的SQL脚本目录)

  • 挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录(这个是MySQL配置文件目录)

    # 1.删除原来的MySQL容器
    docker rm -f mysql
    
    # 2.进入root目录
    cd ~
    
    # 3.创建并运行新mysql容器,挂载本地目录
    docker run -d \
      --name mysql \
      -p 3306:3306 \
      -e TZ=Asia/Shanghai \
      -e MYSQL_ROOT_PASSWORD=123 \
      -v ./mysql/data:/var/lib/mysql \
      -v ./mysql/conf:/etc/mysql/conf.d \
      -v ./mysql/init:/docker-entrypoint-initdb.d \
      mysql

 5. 镜像

举个例子,我们要从0部署一个Java应用,大概流程是这样:

  • 准备一个linux服务(CentOS或者Ubuntu均可)

  • 安装并配置JDK

  • 上传Jar包

  • 运行jar包

那因此,我们打包镜像也是分成这么几步:

  • 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)

  • 安装并配置JDK

  • 拷贝jar包

  • 配置启动脚本

5.1.Dockerfile 

例如,要基于Ubuntu镜像来构建一个Java应用,其Dockerfile内容如下:

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定项目监听的端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

有人提供了基础的系统加JDK环境,我们在此基础上制作java镜像,就可以省去JDK的配置了:

 Dockerfile:

# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

5.2.部署java示例

我们将docker-demo.jar包以及Dockerfile拷贝到虚拟机的/root/demo目录

然后,执行命令,构建镜像: 

# 进入镜像目录
cd /root/demo
# 开始构建
docker build -t docker-demo:1.0 .

命令说明:

  • docker build : 就是构建一个docker镜像

  • -t docker-demo:1.0-t参数是指定镜像的名称(自定义),1.0可不写,就是最新版

  • . : 最后的点是指构建时Dockerfile所在路径,由于我们进入了demo目录,所以指定的是.代表当前目录,也可以直接指定Dockerfile目录

# 直接指定Dockerfile目录
docker build -t docker-demo:1.0 /root/demo

 结果:

查看镜像列表: 

# 查看镜像列表:
docker images
# 结果
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
docker-demo   1.0       d6ab0b9e64b9   27 minutes ago   327MB
nginx         latest    605c77e624dd   16 months ago    141MB
mysql         latest    3218b38490ce   17 months ago    516MB

 然后尝试运行该镜像:

# 1.创建并运行容器 取名 dd
docker run -d --name dd -p 8080:8080 docker-demo:1.0
# 2.查看容器
docker ps
# 结果
CONTAINER ID   IMAGE             PORTS                                                  STATUS         NAMES
78a000447b49   docker-demo:1.0   0.0.0.0:8080->8080/tcp, :::8090->8090/tcp              Up 2 seconds   dd
f63cfead8502   mysql             0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   Up 2 hours     mysql

# 3.访问
 localhost:8080/

6,网络

容器的网络IP其实是一个虚拟的IP,其值并不固定与某一个容器绑定,如果我们在开发时写死某个IP,而在部署时很可能MySQL容器的IP会发生变化,连接会失败。

自定义网络后,可以使用容器名来进行网络访问避免上面问题

 6.1 Docker网络常见命令

常见命令有:

命令

说明

文档地址

docker network create

创建一个网络

docker network create

docker network ls

查看所有网络

docs.docker.com

docker network rm

删除指定网络

docs.docker.com

docker network prune

清除未使用的网络

docs.docker.com

docker network connect

使指定容器连接加入某网络

docs.docker.com

docker network disconnect

使指定容器连接离开某网络

docker network disconnect

docker network inspect

查看网络详细信息

docker network inspect

 6.2自定义网络

# 1.首先通过命令创建一个网络
docker network create name

# 2.然后查看网络
docker network ls

# 其中,除了name以外,其它都是默认的网络

# 3.让mysql加入该网络,注意,在加入网络时可以通过--alias给容器起别名
# 这样该网络内的其它容器可以用别名互相访问!
# 3.1.mysql容器,指定别名为db,另外每一个容器都有一个别名是容器名
docker network connect hmall mysql --alias db

# 可以直接使用一条龙命令 创建mysql容器并加入自定义网络
docker run -d --name mysql -p 3306:3306 --network name mysql

OK,现在无需记住IP地址也可以实现容器互联了。

总结

  • 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身

  • 在同一个自定义网络中的容器,可以通过别名互相访问

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux Docker离线安装部署需要以下步骤: 1. 在联网环境下,下载Docker安装包和相关依赖包,可以使用命令:sudo apt-get install docker.io 2. 将下载好的Docker安装包和相关依赖包复制到离线环境中的某个目录下。 3. 在离线环境中,使用命令:sudo dpkg -i 安装包名,安装Docker和相关依赖包。 4. 安装完成后,使用命令:sudo systemctl start docker,启动Docker服务。 5. 使用命令:sudo docker run hello-world,测试Docker是否安装成功。 6. 如果需要使用Docker镜像,可以将镜像文件复制到离线环境中,使用命令:sudo docker load -i 镜像文件名,加载镜像。 7. 使用命令:sudo docker run 镜像名,启动容器。 注意事项: 1. 离线环境中需要安装Docker版本和相关依赖包版本需要与联网环境中下载的版本一致。 2. 离线环境中需要安装Docker版本和相关依赖包版本需要与操作系统版本兼容。 3. 在离线环境中安装Docker和相关依赖包时,可能会遇到依赖关系问题,需要手动安装依赖包。 <br>### 回答2: Docker是一种容器化技术,可以在其中运行各种应用程序。如果要在没有网络连接的情况下安装部署Docker,可以使用离线安装方式。下面是一些关于Linux Docker离线安装部署的步骤: 1. 获取Docker二进制文件 在一个连接互联网的计算机上,可以通过官方网站或镜像站点下载适用于Linux系统的Docker二进制文件,然后将它们拷贝到没有网络连接的计算机上。 2. 安装DockerDocker二进制文件拷贝到需要安装Docker的计算机上后,通过sudo命令运行dockerd,启动Docker守护进程。然后使用docker命令测试Docker是否安装成功。 3. 配置Docker 在离线安装的情况下,可能需要为Docker配置所需的镜像、存储库和网络。可以通过以下步骤来完成配置: - 创建私有Docker注册表 - 拷贝所需的Docker镜像文件到Docker注册表 - 配置Docker客户端以使用私有注册表 - 配置Docker网络 4. 运行Docker容器 在安装和配置Docker后,可以通过Docker容器运行应用程序。可以使用Dockerfile创建Docker镜像,然后利用docker run命令对容器进行操作。运行Docker容器可以采用以下命令: - sudo docker run -itd --name container_name image:tag 其中,-itd表示以交互式和后台模式运行容器,--name指定容器名称,image:tag指定所需的Docker镜像文件。 总之,对于需要在没有网络连接的计算机上安装部署Docker的用户,可以采用离线安装方式。通过拷贝Docker二进制文件、安装Docker、配置Docker和运行Docker容器,可以轻松地完成Linux Docker离线安装部署的任务。 <br>### 回答3: Docker是一种快速创建、部署和运行应用程序的开源容器化平台,它允许用户在隔离的容器中运行应用程序。Docker的离线安装部署可以在没有网络连接或网络连接不稳定的情况下进行安装,而且具有快速、简便、可重复性好等优点。以下是基于Linux操作系统的docker离线安装部署流程: 1. 下载Docker离线安装包,比如在Docker官网上下载一个tar包。 2. 构建一个离线安装镜像,将下载的离线安装包复制到镜像中。 3. 上传镜像到目标服务器。可以使用FTP、rsync等工具将镜像复制到目标服务器。也可以借助U盘、光盘等存储介质进行传输。 4. 在目标服务器上加载镜像,使用如下命令进行加载: docker load -i /path/to/your/image.tar 5. 安装完成后,使用如下命令查看安装的版本: docker version 6. 启动Docker服务,使用如下命令启动Docker: systemctl start docker 7. 确认Docker是否已经成功安装,在终端上输入以下命令,若能正常输出,则表明Docker已经可以正常使用: docker run hello-world 8. 如果需要安装其他Docker镜像,可以使用docker pull命令进行下载。如: docker pull centos 到这里,Docker的离线安装部署就已经完成了。值得注意的是,在没有网络连接的情况下无法通过Docker Hub下载和安装Docker镜像,所以需要在离线环境下构建自己的Docker镜像进行部署使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值