Docker

目录

1.离线安装

1.1.下载Docker离线包

1.2.下载离线安装工具

 1.3.安装

1.4.镜像加速 

1.4.1.下面命令直接生成文件 daemon.json

1.4.2. 重新加载docker配置

1.4.3.重启docker服务:

1.5. 查看docker的基本信息和测试安装结果

2.在线安装

2.1.安装一组工具

2.2.设置 yum 仓库地址

2.3.更新 yum 缓存

2.4.安装新版 docker

3.镜像 

3.1.下载镜像(指定版本)

3.2.查看镜像列表

3.3.给镜像添加名称

3.4. 查看指定镜像

3.5.删除镜像

3.6.导入导出镜像

.导出镜像并压缩到压缩文件

.导入镜像 

 4.容器

4.1.从镜像运行启动容器

从 tomcat 镜像启动容器:

-d 后台运行Tomcat容器 

 docker exec 进入容器,运行指定命令

4.2.查看容器

.查看容器的日志:

 .查看容器的创建详细历史信息

4.3.ENTRYPOINT 和 CMD 设置容器启动时的默认执行命令

4.3.1.只设置 CMD 来执行 ls -a -l: 

4.3.2.用 ENTRYPOINT 和 CMD 两个一起设置来执行 ls -a -l:

4.4.启动容器时覆盖 ENTRYPOINT 和 CMD 

 .覆盖 CMD:

.覆盖 ENTRYPOINT:

4.5.--name 和 --restart=always

4.6.--rm 和 docker cp 

4.7.删除容器

5.文件挂载 -v

5.1.目录挂载

5.2.数据卷挂载

5.3.删除数据卷 

 6.网络

6.1.端口映射 -p参数

6.2.虚拟网络

7.构建镜像

准备必要的文件

Dockerfile

执行构建

启动容器


1.离线安装

1.1.下载Docker离线包

https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz

在这里可以选择自己需要的版本进行下载:
Index of linux/static/stable/

1.2.下载离线安装工具

GitHub - Jrohy/docker-install: auto install latest docker by online/offline (binary install)

按图示下载安装工具:

在这里插入图片描述

 1.3.安装

将前面下载的以下文件放入服务器的 /root/docker-install 文件夹下:

- [docker-install]
    - docker-20.10.6.tgz
    - install.sh
    - docker.bash

执行安装:

# 进入 docker-install 文件夹
cd docker-install

# 为 docker-install 添加执行权限
chmod +x install.sh

# 安装
./install.sh -f docker-20.10.6.tgz

1.4.镜像加速 

修改配置文件 /etc/docker/daemon.json

1.4.1.下面命令直接生成文件 daemon.json

cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}
EOF
 

1.4.2. 重新加载docker配置

sudo systemctl daemon-reload

1.4.3.重启docker服务:

#重启docker服务
sudo systemctl restart docker

1.5. 查看docker的基本信息和测试安装结果

docker info

docker run hello-world

2.在线安装

2022年1月31日起,CentOS开发团队将会移除官方镜像源上关于CentOS 8所有的包,届时如果在CentOS 8上再次使用yum命令安装包则会报以下错误:

下载元数据失败:Cannot prepare internal mirrorlist: No URLs in mirrorlis

解决思路
如果还需要继续使用Centos 8,则需更换下载源

将下载源更换为阿里源等镜像源,可以具体搜索操作步骤
或直接运行命令

sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
sudo sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
 

# 安装正确的源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

# 生成缓存
yum makecache

2.1.安装一组工具

sudo yum install -y yum-utils 

2.2.设置 yum 仓库地址

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

sudo yum-config-manager \
     --add-repo \
     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 

2.3.更新 yum 缓存

sudo yum makecache fast #yum 是包管理器
 

2.4.安装新版 docker

sudo yum install -y docker-ce docker-ce-cli containerd.io 

3.镜像 

3.1.下载镜像(指定版本)

# 下载 redis 镜像, 默认下载 redis:latest
docker pull redis:5.0.12

3.2.查看镜像列表

docker images

3.3.给镜像添加名称

# 镜像可以起另一个名称,名称格式: repository:tag
# 默认的 tag 是 latest
docker tag redis:5.0.12 tedu/redis:v5012

3.4. 查看指定镜像

# 可以看到同一个镜像(ID相同)可以有多个名称
docker images | grep redis

3.5.删除镜像

镜像的名称可以被删除,只有唯一的一个名称时会删除镜像:

docker rmi redis:5.0.12

3.6.导入导出镜像

.导出镜像并压缩到压缩文件

# 把两个镜像 redis:latest 和 centos:8 导出,并压缩到 imgs.gz
docker save redis centos:8 | gzip > imgs.gz

.导入镜像 

docker load -i imgs.gz

 4.容器

4.1.从镜像运行启动容器

从一个镜像可以运行启动一个或多个容器。

所谓容器,我们可以理解为是一个虚拟的计算机,其中运行着操作系统,操作系统中运行着我们部署的应用。

从 tomcat 镜像启动容器:

docker run tomcat

-d 后台运行Tomcat容器 

docker run -d tomcat

 docker exec 进入容器,运行指定命令

绝大多数情况下一个容器中只运行一个应用。

容器中也允许运行启动多个应用,可以进入已经启动的容器, 在里面运行启动其他应用:

# 进入容器,运行指定的命令
docker exec -it 4d3 pwd
docker exec -it 4d3 touch f1.txt
docker exec -it 4d3 ls -l

# 启动 top 查看进程列表
# ctrl+c 可以退出top
docker exec -it 4d3 top

# 启动bash命令行
# exit 可以退出bash
docker exec -it 4d3 bash

4.2.查看容器

# 只查看运行的容器
docker ps 

# 查看所有容器,包括已停止的容器
docker ps -a

# 仅列出容器的 id
docker ps -aq

.查看容器的日志:

格式:docker logs  名称/id

可以使用容器的名称或 id,使用id是允许至少写三位,能与其他id区分即可

docker logs 4d3

 .查看容器的创建详细历史信息

docker history 容器名

4.3.ENTRYPOINT 和 CMD 设置容器启动时的默认执行命令

这两向设置都是用来设置容器中运行的命令。

4.3.1.只设置 CMD 来执行 ls -a -l: 

CMD ["ls", "-a", "-l"]

4.3.2.用 ENTRYPOINT 和 CMD 两个一起设置来执行 ls -a -l

两项一起设置时,会把两项设置的内容连接起来作为一个完整的命令

ENTRYPOINT ["ls"]
CMD ["-a", "-l"]

4.4.启动容器时覆盖 ENTRYPOINT 和 CMD 

 .覆盖 CMD

以 tomcat 镜像为例,镜像中设置的默认命令是 catalina.sh run,可以任意指定命令覆盖这个默认命令,这里执行 ls -a -l 来测试:

docker run tomcat ls -a -l

.覆盖 ENTRYPOINT

--entrypoint设置运行的命令,不许写在镜像名称 tomcat 的前面。注意,这里不能添加命令的参数;

镜像名称 tomcat 后面的内容会覆盖 CMD

docker run --entrypoint ls tomcat -a -l

4.5.--name 和 --restart=always

--name
每个启动的容器都可以指定一个名称,方便使用名称来操作容器。

--restart=always
docker系统服务重启,或者操作系统重启,容器可以随系统自动启动。

# cat1容器可以随系统启动
docker run -d \
--name cat1 \
--restart=always \
tomcat

# cat2系统重启后默认是关闭状态,不会自动启动
docker run -d \
--name cat2 \
tomcat

# 查看容器
docker logs cat1

docker inspect cat1

# 重启docker系统服务
systemctl restart docker

# 查看容器,可以看到 cat1 自动重启了,而 cat2 处于关闭状态
docker ps -a

4.6.--rm 和 docker cp 

         

--rm:
有时候我们会临时使用一个容器之后这个容器就不再使用,添加 --rm 参数可以在容器停止时自动删除容器

docker cp:
在容器和宿主机之间复制文件

下面来看一个实际的例子,这个例子中我们从 tomcat 的一个临时容器复制配置文件 server.xml 到宿主机,然后在 server.xml 中修改端口号,把 8080 改成 80。
 

# 启动一个临时容器
docker run -d \
--rm \
--name tmp \
tomcat

# 把 tomcat 的 server.xml 复制到宿主机的 /root/ 目录下
docker cp tmp:/usr/local/tomcat/conf/server.xml  /root/

# 停止临时容器,会自动删除
docker stop tmp

docker ps -a

# 修改 server.xml 中的8080端口,改成80
vim server.xml

# -v 把宿主机路径挂载到容器的一个路径
# 挂载的路径可以是文件,也可以是文件夹
# 这里把修改过的 server.xml 挂载到新启动的容器中
docker run -d \
--name cat2 \
-v /root/server.xml:/usr/local/tomcat/conf/server.xml \
tomcat

# 查看启动日志,确认使用 80 端口启动
docker logs cat2

4.7.删除容器

docker rm 容器id

#删除所有容器

docker rm -f $(docker ps -aq)

5.文件挂载 -v

用 -v 参数,他可以将宿主机的路径挂载到容器指定路径,通过 -v 参数可以挂载文件、目录和数据卷

5.1.目录挂载

# 清理容器
docker rm -f $(docker ps -aq)

# -v 宿主机路径:容器路径
# 挂载的可以是文件,也可以是文件夹
# -v 可以在宿主机自动新建目录
docker run -d \
--name cat1 \
-v /usr/app:/opt/app \
tomcat

# 进入容器,在 /opt/app 下新建文件 f1.txt
docker exec -it cat1 bash

touch /opt/app/f1.txt

# 退出容器的命令行
exit

# 访问宿主机的文件夹
cd /usr/app
ls

5.2.数据卷挂载

# 新建数据卷
docker volume create my-vol

# 查看 my-vol 数据卷的信息
docker volume ls

# /var/lib/docker/volumes/my-vol/_data
docker inspect my-vol

# 挂载 my-vol 数据卷到容器的 /opt/app 路径
docker run -d \
--name cat2 \
-v my-vol:/opt/app \
tomcat

# 在容器的 /opt/app 下新建 f2.txt
docker exec -it cat2 bash

touch /opt/app/f2.txt

# 退出容器的命令行
exit

# 进入 my-vol 数据卷的真实目录,查看 f2.txt
cd /var/lib/docker/volumes/my-vol/_data

ls

5.3.删除数据卷 

docker volume rm my-vol

 6.网络

6.1.端口映射 -p参数

客户端要访问宿主机内部运行的容器时,可以在宿主机打开一个端口,当客户单访问这个端口时,可以将访问转发到内部的容器。

-p 参数:
通过 -p 参数设置,可以在宿主机上选择一个端口映射到容器的端口。

# 清理容器
docker rm -f $(docker ps -aq)

# 端口映射
# -p 宿主机端口:容器端口
docker run -d \
--name cat1 \
-p 80:8080 \
tomcat


6.2.虚拟网络

容器键互联可以使用 Docker 的虚拟网络来连接。

在 Docker 中可以创建任意多个虚拟网络,容器之间可以通过虚拟网络互联互通。创建虚拟网络时宿主机也会连接到虚拟网络。

# 新建虚拟网络 my-net
docker network create my-net

# 查看虚拟网络
docker network ls

# 查看网络描述信息
docker inspect my-net

# 查看宿主机新建的虚拟网卡
ifconfig

# 清理容器
docker rm -f $(docker ps -aq)

# 新建两个容器 cat1 和 cat2
# 连接到虚拟网络 my-net
docker run -d --name cat1 \
--net my-net \
tomcat

docker run -d --name cat2 \
--net my-net \
tomcat

# 查看两个容器的虚拟网络ip
docker inspect cat1
docker inspect cat2

# 测试网络能否互联互通
# 从宿主机ping两个容器
ping 172.18.0.2
ping 172.18.0.3

# 进入cat1,ping宿主机和cat2
docker exec -it cat1 ping 172.18.0.1
docker exec -it cat1 ping 172.18.0.3
# 从容器访问另一个容器,可以使用容器名称访问,容器内部实现了解析环境
docker exec -it cat1 ping cat2

7.构建镜像

构建镜像类似于一台电脑的装机过程,添加文件、安装软件、配置环境…

例如构建一个 tomcat 10 镜像流程,就像在一台电脑上安装配置 tomcat 环境一样:

  1. 选择基础镜像 centos:8(相当于一台新电脑,只有操作系统)
  2. 添加 jdk 和 tomcat 文件
  3. 设置环境变量
  4. 设置开机启动 tomcat

下面来演示构建 tomcat 10 镜像的过程:

准备必要的文件

jdk 和 tomcat 10 的压缩文件放入一个文件夹中,这个文件夹不应该包含其他无关文件:

[/root/tomcat/]
       - jdk-8u291-linux-x64.tar.gz
       - apache-tomcat-10.0.6.tar.gz

Dockerfile

Dockerfile 类似于一个批处理文件,用来设置镜像的构建流程

在上一步的 tomcat 文件夹下创建 Dockerfile 文件:

[/root/tomcat/]
       - jdk-8u291-linux-x64.tar.gz
       - apache-tomcat-10.0.6.tar.gz
       - Dockerfile

编辑 Dockerfile 文件

cd /root/tomcat

vim Dockerfile 

在文件中添加以下内容:

# 选择基础镜像
FROM centos:8

# jdk 和 tomcat 文件添加到镜像的 /usr/local/ 目录下
# ADD 指令会自动解压文件
ADD jdk-8u291-linux-x64.tar.gz apache-tomcat-10.0.6.tar.gz /usr/local/

# 切换到镜像中指定的文件夹下
WORKDIR /usr/local/apache-tomcat-10.0.6/

# 设置环境变量
ENV JAVA_HOME=/usr/local/jdk1.8.0_291 \
    CATALINA_HOME=/usr/local/apache-tomcat-10.0.6 \
    PATH=/usr/local/jdk1.8.0_291/bin:/usr/local/apache-tomcat-10.0.6/bin:$PATH

# EXPOSE 8080 只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
# 这个声明有两个好处:
#   1.帮助镜像使用者理解这个镜像服务的端口,以方便配置映射
#   2.在运行时使用随机端口映射时,也就是 docker run -P时,会自动随机映射 EXPOSE 的端口
EXPOSE 8080

# 设置启动命令
CMD ["catalina.sh", "run"]

Dockerfile 指令参考手册:
Dockerfile reference | Docker Documentation

执行构建

进入 tomcat 文件夹,并在当前文件夹下找到 Dockerfile 和其他需要的文件,来构建镜像:

cd /root/tomcat

# 使用当前文件夹中的 Dockerfile 文件进行构建
# 新构建的镜像命名为 tomcat:10
docker build -t tomcat:10 ./

查看构建结果:

docker images

docker history tomcat:10

docker inspect tomcat:10

启动容器

docker run -d --name cat1 -p 8080:8080 tomcat:10

docker ps -a

docker logs cat1

浏览器访问测试:
http://192.168.64.150:8080 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值