Docker:复习安装使用
docker:差不多就是服务器的虚拟机。
环境:Ubuntu20.04LTS(腾讯云的)
docker:
概念
镜像(image)和容器(container)
- 镜像相当于一个模板,同一个镜像生成的容器环境一样。
- 每一个容器相当于一个完全独立的云服务器。
- 迁移docker的时候,实际上迁移的是容器。
安装
[官网](https://docs.docker.com/engine/install/linux-postinstall/)
另外建议用一个普通用户进行操作,不要root。
-
安装环境之前,需要更新一下软件
sudo apt-get update
-
更新环境之后,在安装一个
tmux
,sudo apt-get install tmux
(tmux一些个性设置,可以去百度搜索一下更改下) -
打开官网,翻到如下位置,复制粘贴4个命令即可。
-
第一步
sudo apt-get update
,这个前面已经弄过,跳过
注意从这一步开始安装,就要开一个tmux,在这里安装,防止掉线或者闪退可以再次恢复进程。
- 第二步:
如果需要输入y的地方直接输入y即可。
sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
- 第三步
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 第四步
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 第五步
sudo apt-get update
- 第六步
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- 到这里就安装完成了,输入命令
docker --version
即可查看是否安装成功
首要设置
- 将当前用户添加到docker用户组
原因:为了避免每次使用docker命令都需要加上sudo权限,可以将当前用户加入安装中自动创建的docker用户组(可以参考官方文档):
sudo usermod -aG docker $用户名
- 配置之后:
还是权限拒绝,这个时候exit退出ssh连接,然后在ssh登录即可。(如果你不是ssh登录的,退出重登即可。让服务器刷新配置。)
使用
镜像(images)
- 安装完docker之后,我们首先需要拉取一个镜像,先开一个指定名称docker_test的tmux
tmux new -s docker_test
, 拉取镜像docker pull ubuntu:20.04
有关tmux的几个简单命令,贴在这里:
- tmux a -t 名字 :进入指定的session
- tmux ls 列出所有的session
- tmux new -s 名字 :创建指定名字的session
- 在tmux里面复制:
- 选中:先ctrl+a然后按一下 [ ;鼠标再选中。
- 粘贴:先ctrl+a然后按 ] ;即可出现内容。
-
docker images
可以查看所有的镜像
-
docker image rmi ubuntu:20.04
删除镜像,如果不让删除,可以在rmi后面加个-f
-
docker save -o ubuntu_20_04.tar ubuntu:20.04
:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中
-
docker load -i ubuntu_20_04.tar
:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来
可以看到镜像成功加载出来。所以,迁移到别的服务器也是同理,把文件先传到指定的服务器,然后再加载即可
- 补充一个命令:
//【】中的内容是可选项 docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container的镜像
- 重命名镜像
docker tag 镜像id 重命名后的名字 # 然后将原来的image名称删除 docker rmi 原镜像名
容器(container)
- 首先用
docker ps -a
查看本地的所有容器(第一次当然没有了。。。只不过是讲一下这个命令-_- )
如果不加
-a
是显示所有正在运行的容器,两个不一样。
-
docker [container] create -it ubuntu:20.04
:利用镜像ubuntu:20.04创建一个容器(未运行)。
-
docker [container] start CONTAINER:启动容器
, 参数CONTAINER可以是id,也可以是names
相关命令:
docker stop
停止容器docker restart
重启容器docker [contaienr] run -itd ubuntu:20.04
:创建并启动一个容器(ps:加-d是不进入容器,如果是-it
那就回创建启动并进入容器)docker kill 容器id
:杀死容器
docker [container] attach CONTAINER
:进入容器(只能进入正在运行的容器)
docker exec -i -t 容器id /bin/bash
:这个命令也可以进入容器(上面那个命令不行的时候可以试试这个)
- 先按
Ctrl-p
,再按Ctrl-q
可以挂起容器
如果直接
ctrl + d
退出:这个容器就会关闭
可以看到,d退出后,再运行命令查看运行的容器已经没有了
-
docker [container] exec CONTAINER COMMAND
:在容器中执行命令
-
docker [container] rm CONTAINER
:删除容器(删除只能删除未运行的,-rm
删除容器 ,rmi
删除镜像,注意区别 )
删除正在运行的就会报错:
-
docker container prune
:删除所有已停止的容器(前面的【container】参数可以省略,但这里删除所有就不能省略) -
docker export -o xxx.tar CONTAINER
:将容器CONTAINER导出到本地文件xxx.tar中
-
docker import xxx.tar image_name:tag
:将本地文件xxx.tar导入成镜像,并将镜像命名为image_name:tag(下面图片实例中没有命名)
PS: 将容器导出,实际上也是将该容器的image导出
镜像和容器导出的区别:
export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态
save/load会保存完整记录,体积更大
-
docker rename CONTAINER1 CONTAINER2
:重命名容器
-
docker和本地之间的文件复制(复制目录也是一样,不需要加-r):
docker cp xxx CONTAINER:xxx 或 docker cp CONTAINER:xxx xxx
从容器中复制到本地也是一样,只需要把容器路径和本地路径调换一下
- 补充:
docker stats
:查看所有容器的统计信息,包括CPU、内存、存储、网络等信息
Ctrl + c
退出
-
docker logs 容器id(或者容器的名字也可以)
:查看指定容器的日志信息
docker logs 容器id -f
:持续输出日志,不会退出,上面那个会输出之后就退出。
ssh连接docker
-
首先在云平台开放端口
-
docker run -p 20000:22 --name java_test -itd my_docker_server
:用my_docker_server镜像创建并运行java_test容器
-p
将容器的的22端口映射为本地的20000端口
java_test是容器的名字
my_docker_server是镜像的名字
-
进入容器内设置密码
-
设置后可以
ssh root@ip地址 -p 20000
登录了
如果是在云服务器上ssh登录docker,ip就是localhost
如果是自己电脑上ssh登录docker,跳过云服务器,ip就是云服务器的
docker根据Dockfile文件创建镜像和运行项目
- 在已有的项目下,Dockflie一般是在项目根目录,(项目根目录)执行
docker build -t 设置的项目名 .
:会在当前目录创建一个镜像 docker run -p 80:80 -d 镜像名
:运行镜像,第一个80是外面的端口,第二个80是docker的端口,映射。-d
是在后台启动,去掉之后会在前台启动
参考acwing课程,若有侵权,联系删除。(本人已买课程,支持正版)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端