Docker Desktop

安装

平时要使用 Docker 不想安装虚拟机,也不想买服务器时推荐安装官方提供的「Docker Desktop」

1、官网下载安装包

2、修改默认安装位置

默认是安装在 C 盘中的并且无法修改,后续下载一些镜像时也会存放在 C 盘,我这里通过「mklink 创建软链接」的方式,将文件映射到我的 D 盘中,先在 D 盘创建好如下四个目录结构:

1
2
3
4
mkdir D:\Docker  
mkdir D:\Docker\Local
mkdir D:\Docker\Roaming\Docker
mkdir D:\Docker\Roaming\Docker Desktop

然后以管理员身份打开 cmd,在打开的 cmd 窗口中依次执行下面四个 mklink 命令

1
2
3
4
mklink /j "C:\Program Files\Docker" "D:\Docker"
mklink /j "C:\Users\ICEFJL\AppData\Local\Docker" "D:\Docker\Local"
mklink /j "C:\Users\ICEFJL\AppData\Roaming\Docker" "D:\Docker\Roaming\Docker"
mklink /j "C:\Users\ICEFJL\AppData\Roaming\Docker Desktop" "D:\Docker\Roaming\Docker Desktop"

3、安装
图片图片 Accept 后出现以下弹窗:Docker Desktop 需要更新的 WSL 内核版本。通过运行 “wsl –update” 更新 WSL 内核

更改镜像下载源

图片复制以下代码覆盖掉要更改部分,重启 Docker Desktop 即可,「registry-mirrors」配的都是国内的一些镜像源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors" : [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://cr.console.aliyun.com/"
]
}

图片

参考

Windows中也可以安装使用Docker (qq.com)

Docker 学习

前言 - Docker — 从入门到实践 (gitbook.io)

Docker 安装

Ubuntu Docker 安装 | 菜鸟教程 (runoob.com)
linux/ubuntu 下的安装命令 (使用阿里云镜像):

1
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && curl -fsSL https:``//download``.[docker.com](http://docker.com/)``/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] [http://mirrors.aliyun.com/docker-ce/linux/ubuntu](http://mirrors.aliyun.com/docker-ce/linux/ubuntu) $(lsb_release -cs) stable" && sudo apt-get update && sudo apt-get install -y docker-ce

一条命令就可以搞定安装,不过安装可能需要一些时间,等着就行。

在使用过程中,当需要查找某个镜像的时候,我们可以去 docker 中央仓库:https://hub.docker.com/  查看,从中我们可以看到该名称镜像历史的 release 的版本,我们可以根据需求选择自己需要的版本。

Docker 常用管理命令

Docker 命令大全 | 菜鸟教程 (runoob.com)
service docker start # 启动 docker 服务器

(1) 拉取某个镜像

docker pull xxxx

(2) 查看镜像与删除镜像

查看所有镜像:docker images

删除镜像 :docker rmi xxxx

注意:删除镜像前必须先停用、删除该镜像产生的实例

(3) 查看与删除实例

查看所有实例:docker ps -a

查看 activate 实例:docker ps

删除实例:docker rm xxx

(4) 根据镜像创造 docker 实例,这里以 nginx 为例

docker run --name nginx -p 80:80 -v /root/docker_conf/nginx/nginx.conf:/etc/nginx/nginx.conf -d docker.io/nginx

其中: -name 是镜像的名称,  -p 是端口映射, -v 是绑定一个卷, 我们可以把自己的文件目录映射到镜像内部目录, 冒号前面为自己的实际机器, : 后面是对应镜像的目录。

(5) 当 docker 启动失败的时候 debug 原因:

docker logs xxID

(6) 进入实例

根据上面的命令创建的实例之后,如果成功的话会默认启动实例,我们可以使用下列命令进入到该实例内部:

docker exec -it nginx bash

docker run -it --rm ubuntu /bin/bash    运行存在的镜像,并以交互的方式进入容器,运行完删除容器

(7) 复制文件到实例内部系统

docker cp my.cnf mysql5.7:/etc/mysql/my.cnf

把宿主机文件拷到容器里面
docker cp 要拷贝的文件路径 容器名: 要拷贝到容器里面对应的路径

容器里面拷文件到主机
docker cp 容器名: 要拷贝的文件在容器中的路径 要拷贝到宿主机器的响应路径

(8)  实例内系统安装软件

实例内也是一个操作系统,我们可以安装需要使用的程序:

apt update

例如安装 vim 命令 :  apt install vim

(9) 停止,启动,重新启动 docker 实例

docker start/stop/restart xxx

(10)  卸载 docker

yum remove docker-ce

删除镜像、容器、配置文件等内容:

rm -rf /var/lib/docker

Docker 资源管理命令

docker 镜像在很多时候会耗占比较多的内存和 cpu, 甚至某个镜像被用来挖矿的情况下, cpu 会达到 100%(都是血与泪的实践经历啊), 所以我们可以使用下面的命令来限制性设置某个实例的内存与 cpu 占用量。

(1) docker 各个镜像资源使用情况查看 (包括 cpu 和内存):

docker stats

(2)  限制 docker 内存

docker update -m 20M --memory-reservation 20M --memory-swap 20M nginx

(3)限制 docker cpu

docker update --cpu-period=100000 --cpu-quota=20000 nginx

在每 100 毫秒的时间里,运行进程使用的 CPU 时间最多为 20 毫秒,这里仅仅考虑百分比。

Docker 镜像文件保存与加载

(1) 保存 docker 镜像文件到本地:

docker save nginx >./nginx.tar

(2)  在另一台主机加载本地文件到镜像 :

docker load < nginx.tar

然后看 docker images ,就能看到该镜像 ,但是名字和标签都是 none

(3)执行完上述语句后,查看本地镜像,会看到新加载的镜像名字和标签都是 none,利用该镜像的 id 对名字和标签重新命名即可:

指令:docker tag 镜像id 镜像名:标签 docker tag 172825a55619 confluence6.12_cracked:0.1

(4) 启动镜像

docker run -it --name nginx 172825a55619 /bin/bash

Docker 镜像文件的提交与上传到中央仓库

很多时候,我们会需要在已有的镜像上进行一些自定义修改,然后重新打包上传自己的镜像供别人使用,我们可以使用下面的流程来上传自己新打包的镜像到中央仓库。

(5.1)  官网账号注册

首先我们先到 docker 官网注册一个账号,这样我们才能将制作好的镜像上传到 docker 仓库,

打开 https://hub.docker.com/

(5.2) 提交自己要上传的镜像

docker commit Container_name yourdockerhub/nginx:latest

注意:commit 对包名命名有要求,Container_name 容器名称,yourdockerhub 改成自己的账号,否则无法上传

(5.3)  登录到远程 docker 仓库 (输入自己注册的账号和密码)

docker login

(5.4)  上传至 docker 云端

docker push yourdockerhub/nginx:latest
注意: 这里 push 对包名命名有要求,yourdockerhub 改成自己的账号,否则无法上传 上传成功了就可以在中央仓库你的账号下搜到你刚上传的镜像了。

解决方案

Docker 内程序如何访问宿主机的端口

请在你的 docker-compose.yml 的服务中加上

1
2
extra_hosts:  
- "host.docker.internal:host-gateway"

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.5'  

services:
hello-api:
build:
context: .
dockerfile: hello/Dockerfile
environment:
- TZ=Asia/Shanghai
privileged: true
volumes:
- ./etc:/app/etc
ports:
- "8888:8888"
stdin_open: true
tty: true
extra_hosts:
- "host.docker.internal:host-gateway"

来源:mongodb - lookup host.docker.internal: no such host - Stack Overflow