Docker

以下docker内容是在windows下的体验

windows的docker有两个模式:HYPE-V和WSL2

其中,我更推荐WSL2模式

  1. 可以修改container的配置文件
  2. 更方便地共享文件,不需要请求权限

文件位置

1
2
3
4
5
6
7
8
9
10
# 程序位置
C:\Program Files\Docker
# 程序配置文件位置
C:\Users\WYH\.docker
# HYPE-V模式 镜像位置
C:\ProgramData\DockerDesktop
# WSL2模式 镜像位置
C:\Users\WYH\AppData\Local\Docker\wsl
# container 位置
\\wsl$\docker-desktop-data\data\docker\containers\

一些常用指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 指定镜像新建容器
# itd: 交互式、伪终端(TTY)、后台运行
docker run -itd --name docker-name image-name[:version]
# 其他参数:p->端口, v->存储卷, rm->是否运行完删除, e->环境变量
-p local-port:docker-port
-v local-volume:docker-volume
-rm
-e MYSQL_ROOT_PASSWORD=root
# 实例
docker run -itd -v C:\workspace\lab:/workspace/lab -p 50003:22 -p 8080:8080 -p 9000:9000 -p 3000:3000 --name jb2-230921 ubuntu:22.04

# 进入容器
docker exec -it docker-name bash
# 退出容器
exit
# 查看所有正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 启动/停止/重启/删除 容器
docker start/stop/restart/rm docker-name
# 重命名 容器
docker rename old-docker-name new-docker-name
# 复制容器里的文件到本机
docker cp docker-name:/path C:\path
docker cp mysql:/etc/mysql C:\Users\WYH\docker\software\mysql\conf


# 查看所有镜像
docker image list
# 删除镜像
docker rmi image-name


# 查看所有挂载
docker volume ls
# 查看指定挂载的详情信息
docker volume inspect volume-name

HYPE-V模式的存储卷

note: The File sharing tab is only available in Hyper-V mode because the files are automatically shared in WSL 2 mode and Windows container mode.
使用挂载命令时,windows系统会提示是否共享文件,同意即可
如果没有,就需要在setting->resources->file sharing中先设置共享

本地ssh连接Ubuntu Docker

(想要在本地与docker容器协作项目,可以直接共享文件,不用这么麻烦)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 本地操作
docker run -itd -p 50003:22 --name docker-name ubuntu:22.04

# docker操作
passwd root
apt-get update && apt-get upgrade && apt-get install ssh openssl openssh-server
vim /etc/ssh/sshd_config
---
PermitRootLogin yes #root能使用ssh登录
port=22 #开启22端口
---
service ssh restart

# 本地ssh连接
ssh -p 50003 root@localhost

Q&A

Windows10平台下创建docker容器显示端口没有权限

1
2
3
$ docker run -itd --name zipkin -p 9411:9411 openzipkin/zipkin 
1f912138540789c77cff413c868789467c8f69d8445960042c99423de35da9ca
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:9411 -> 0.0.0.0:0: listen tcp 0.0.0.0:9411: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

解决办法:关闭Windows的netstat服务即可:net stop winnat