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] [新镜像名称]:[新镜像标签]
相关推荐
时迁24719 分钟前
【k8s】k8s是怎么实现自动扩缩的
云原生·容器·kubernetes·k8s
诡异森林。3 小时前
Docker--Docker网络原理
网络·docker·容器
ALex_zry4 小时前
Docker Macvlan网络配置实战:解决“network already exists“错误
网络·docker·php
IT小辉同学4 小时前
Docker如何更换镜像源提高拉取速度
spring cloud·docker·eureka
matrixlzp5 小时前
K8S Service 原理、案例
云原生·容器·kubernetes
GnixAij6 小时前
Docker SSH端口转发
docker·ssh
angushine6 小时前
让Docker端口映射受Firewall管理而非iptables
运维·docker·容器
玄明Hanko7 小时前
生产环境到底能用Docker部署MySQL吗?
后端·mysql·docker
玄明Hanko7 小时前
Quarkus+Docker最全面完整教程:手把手搞定Java云原生
后端·docker·云原生
SimonLiu0098 小时前
清理HiNas(海纳斯) Docker日志并限制日志大小
java·docker·容器