Docker学习笔记

262 阅读4分钟

1.docker理解

  1. 一个容器相当于简化版的轻量级的VM
  2. 容器共享操作系统内核
  3. 容器都拥有自己的文件系统、CPU、内存、进程空间等
  4. 容器之间相互隔离

2.docker的基本操作

1.镜像imags

2.容器

使用docker run
docker run nginx 启动容器
docker run -d(后台运行) --name(重命名) mynginx nginx
docker run -d --name mynginx nginx

端口映射
端口映射 80->80
docker run -d --name mynginx -p 80:80 nginx

在本地浏览器可以成功访问到

3.修改页面
进入容器:docker exec
 docker exec -it mynginx /bin/bash

#默认静态页面 index.html
 cd usr/share/nginx/html/ 

#每次修改文件都要进入容器的这个目录修改比较麻烦,后面会讲使用Docker的存储,
#将容器内部文件夹映射到外部主机的位置,在外部主机位置修改文件即可!

4.保存镜像

提交:docker commit
docker commit -m "xxx" mynginx mynginx:v1.0

保存:docker save
docker save -o mynginx.tar mynginx:v1.0

保存成mynginx.tar压缩包

加载:Ldocker load

保证环境洁净删除镜像和容器

docker load -i mynginx.tar
#-i指定压缩包的位置

5.分享

登录:docker login

命名 docker tag
docker tag 原来的镜像名 用户名/镜像名

推送 docker pull

制作最新版本

总结

2.docker存储

tip:批量删除使用$

 docker rm -f $(docker ps -aq)
目录挂载

每次修改文件都要进入容器的这个目录修改比较麻烦,后面会讲使用Docker的存储,将容器内部文件夹映射到外部主机的位置,在外部主机位置修改文件即可!

docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx

tip:外部文件修改内部文件跟着改变,修改内部文件外部文件一样改变

卷映射
#将配置文件目录也映射出来
docker run -d -p 88:80 -v /app/nghtml:/usr/share/nginx/html -v /app/ngconf:/etc/nginx --name app02 nginx

直接将/etc/nginx配置文件的目录整个映射出来,失败!因为我们程序的运行要依靠nignx.conf,直接挂载在外部,该目录是空的,没有配置文件,所以无法运行,不能使用这种方式。

挂载是 外 -> 里 卷映射 是 里 -> 外

#卷映射
 docker run -d -p 99:80 -v /app/nghtml:/usr/share/nginx/html -v ngconf:/etc/nginx --name app03 nginx

卷默认在外部目录  /var/lib/docker/volumes/(卷名)
在外部修改配置文件,内部的文件也跟着改变

docker volume ls // 查看所有卷
docker volume (卷名)// 创建卷
docker volume inspect (卷名) // 查看卷详情
tip: 当删除容器时,卷映射的文件和目录挂载的文件都不会被删除

4.网络

清除所有容器

创建两个容器 app1 和 app2

创建docker就有这个docker0的网络
docker为每个容器分配唯一的ip,使用容器ip + 容器端口 可以互相访问

使用 docker inspect app1 查看详情可知道
app1: "IPAddress": "172.17.0.2",
app2: "IPAddress": "172.17.0.3",

在app1容器中 可以访问到app2的ip地址

但是ip由于各种原因可能会变化
docker0默认是不支持主机域名的
所以需要我们创建一个自定义网络,容器名就是稳定域名

清空所有容器重新创建app1和app2,创建之前先创建一个自定义网络

docker network ls
docker network create

docker run -d -p 88:80 --name app1 --network mynet nginx

app1:"IPAddress": "172.18.0.2",
app2:"IPAddress": "172.18.0.3",

进入容器app1  访问 app2

3.遇到问题

镜像源超时:已解决

blog.csdn.net/u014390502/…

#修改镜像源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": [
        "https://docker-0.unsee.tech",
        "https://docker-cf.registry.cyou",
        "https://docker.1panel.live"
    ]
}
EOF
#重启docker
 systemctl daemon-reload && systemctl restart docker
本地win11 docker启动报错:未解决

image.png

Installing, this may take a few minutes...

WslRegisterDistribution failed with error: 0x80370102

Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.

For information please visit aka.ms/enablevirtu…

Press any key to continue...

尝试过以下解决方法(无数次重启电脑还没解决...):

blog.csdn.net/qq_61909707…

勾选Hyper-V

启动window功能

在管理员模式下 PowerShell 中执行以下命令

dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

确保 WSL 使用版本 2:

wsl --set-default-version 2

尝试重新安装 WSL

wsl --install

blog.csdn.net/ruoxuer/art…