Docker的安装与部署

Docker 基本概念介绍


通俗理解:镜像是类,容器是对象实例
仓库 = 应用商店、镜像 = 下载的应用安装程序、容器 = 应用程序

  • 镜像(Image)

    这里面保存了应用和需要的依赖环境

    为什么需要多个镜像?当开发、构建和运行容器化应用程序时,我们通常会有不同优先级。通过为这些独立的任务提供不同镜像

  • 容器(Container)

    镜像的实例。一个容器代表一个正在运行的应用程序、进程或服务。它由 Docker 镜像、执行环境和标准指令集组成。需要扩展服务时,我真正将镜像跑起来的东西,镜像在容器里面。可以看作是一个完全隔离的盒子。

    一个容器镜像实例代表一个独立的进程。

  • Hub

    远程存放镜像的平台, hub上已经有很多制作好的镜像(可以使用国内镜像平台)。

  • 仓库(repository)

    仓库用来保存镜像的地方。

    镜像构建完成后,可以直接在当前宿主上运行,但是 如果需要在其它服务器上使用这个镜像,就需要一个集中存储、分发镜像的服务。仓库就是这样的一个服务。

安装部署 Docker环境


1. 安装依赖包

shell 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2

2. 添加稳定镜像源

shell 复制代码
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

因为docker默认官方的镜像源地址是国外的,速度很慢,这里将数据源设置为阿里云的镜像。

shell 复制代码
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 安装 Docker-CE

shell 复制代码
yum install docker-ce

4. 启动 Docker-CE

shell 复制代码
#设置开机启动 docker服务:
systemctl enable docker
systemctl start docker

5. 卸载 Docker-CE

shell 复制代码
yum remove docker-ce
#清除所有的文件目录
rm -rf /var/lib/docker 

Docker 配置国内源加速


1. 修改配置文件

配置文件:/etc/docker/daemon.json,编辑该文件(没有的话先手动创建)加入国内镜像源

shell 复制代码
# 编辑 Docker 配置文件
$ sudo vim /etc/docker/daemon.json
# 加入以下配置项
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}

Docker镜像加速器(阿里云镜像源)

也可以使用 阿里云-容器镜像服务ACR > 镜像工具 > 镜像加速器

2. 重启 Docker 服务

shell 复制代码
# 方法一,采用 systemctl 来重启,推荐
systemctl daemon-reload
systemctl restart docker

# 方法二,采用 service 来重启
service docker restart

3. 查看是否成功

shell 复制代码
# 查看 Docker 信息
docker info

# 出现以下字段代表配置成功
Registry Mirrors:
  https://dockerproxy.com/
  https://hub-mirror.c.163.com/
  https://mirror.baidubce.com/
  https://ccr.ccs.tencentyun.com/

Docker 常用命令


shell 复制代码
#查看容器(-a 显示包括已经停止的容器):
	docker ps -a
#拉取镜像: 
	docker pull
#查看镜像: 
	docker images
#删除镜像: 
	docker rmi 镜像name/id
#创建镜像(常用方式),注意结尾的.
	#使用当前目录的 Dockerfile 创建镜像(版本号不加默认为 latest)
	docker build -t [新镜像名称]:[新镜像标签] . 
	#通过 -f Dockerfile 文件的位置
	docker build -f [Dockerfile的路径] .
#创建容器(运行镜像): 
	docker run --name [容器名] -d -p 8080:80 [镜像名称]:[镜像标签]
        --name 容器名称 ,后面跟着是镜像路径或名称
        --rm 运行完后删除该容器
        -p 端口映射 8000 外部端口 80镜像里面运行的端口 将8000映射到镜像里面的80
        -it 输出容器命令行的内容 即容器的自身的程序输出在控制台(进入容器)
        -d 和it相反 隐藏后台运行
#容器交互: 
    docker exec -it [容器name/id] /bin/bash
#退出交互: 
	Ctrl+P,Ctrl+Q(Ctrl键一直保持按下)
#启动容器: 
	docker start 容器name/id
#重启容器: 
	docker restart 容器name/id
#停止容器: 
	docker stop 容器name/id
#杀掉运行中的容器
	docker kill 容器name/id
#删除容器: 
	docker rm 容器name/id
#查看容器日志
	docker logs -f -t 容器name/id
        -f : 跟踪日志输出
        -t : 显示时间戳
#设置开机自启: 
	systemctl enable docker

Docker镜像无法删除的解决办法

shell 复制代码
#使用强制删除命令:
	docker rmi -f 镜像id

Docker容器无法stop的解决办法

docker在rm或者kill相应的容器时,发现无法删除,或者出现报错

提示 Error response from daemon: Conflict, cannot remove the default name of the container

解决方法:

shell 复制代码
#使用强制删除命令:
	docker rm -f 容器id
#清理该容器的网络占用:
	docker network disconnect --force bridge 容器id

Docker 镜像导出-导入


将docker image导出保存为tar文件,方便在服务器之间进行传输

1. Docker镜像导出

-o 和 > 表示输出到文件(不加路径则会输出到当前所在目录),[新镜像名称].tar为目标文件

shell 复制代码
docker save -o D:\[新镜像名称].tar [镜像名称]:[镜像标签]
或
docker save [镜像名称]:[镜像标签] > D:\[新镜像名称].tar 

2. 通过Xftp将导出的tar文件传输到其他服务器上

3. Docker镜像导入

shell 复制代码
docker load -i [新镜像名称].tar

4. 导出-导入过程中遇到的问题

导入完成后,镜像的名字和 TAG为 <none>

这个问题的根本在于这个镜像压缩包在打包的时候操作不当所导致

例如,使用镜像ID打包的话导致解压的出来的镜像没有名字

shell 复制代码
docker save -o D:\[新镜像名称].tar [镜像id]

因此,推荐使用镜像名进行打包,此方式打包的镜像,解压出来就有镜像名称了

shell 复制代码
docker save -o D:\[新镜像名称].tar [镜像名称]:[镜像标签]

重命名镜像的方法:

shell 复制代码
docker tag [镜像id] [新镜像名称]:[新镜像标签]
相关推荐
工业3D_大熊1 小时前
3D可视化引擎HOOPS Luminate场景图详解:形状的创建、销毁与管理
java·c++·3d·docker·c#·制造·数据可视化
szc17671 小时前
docker 相关命令
java·docker·jenkins
CP-DD1 小时前
Docker 容器化开发 应用
运维·docker·容器
Stark-C1 小时前
万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统
macos·docker·策略模式
老司机张师傅2 小时前
【微服务实战之Docker容器】第七章-Dockerfile解析
容器·dockerfile·虚悬镜像·docker学习
微信-since811922 小时前
[ruby on rails] 安装docker
后端·docker·ruby on rails
吴半杯3 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
今天我刷leetcode了吗3 小时前
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
tcp/ip·docker·电脑
lwprain4 小时前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat
Code_Artist6 小时前
使用Portainer来管理并编排Docker容器
docker·云原生·容器