文章目录
什么是Docker
Docker 是一个开源的应用容器引擎,一键部署应用的利器
为什么要用Docker
当应用程序开发完,需要在别的机器跑的时候,重新配置运行环境是一件很麻烦的事情,尤其是需要很多第三方库或者依赖,比如python环境,java环境,一样一样下载很麻烦,当然使用脚本语言是一种选择,但是Docker是更好的选择,更加方便稳定
docker可以将软件和环境一起打包,宿主机只需要下载一个docker ,下载镜像,run即可
下载Docker
windows 上开发容器程序(不合适)
官网下载Docker Desktop即可,但是可能需要安装wsl2
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package
命令控制台,wsl2设为默认
wsl --set-default-version 2
下载合适的linux发行版(可选)
https://docs.microsoft.com/zh-cn/windows/wsl/install
https://aka.ms/wslstore
Linux 安装Docker
Deb方式
获取Ubuntu 代号
查看Linux系统架构
下载64位系统的deb,
https://download.docker.com/linux/ubuntu/dists/focal/pool/stable/amd64/
按照deb 的安装方式安装即可
Docker 存储库方式(推荐)
按照教程执行即可
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
注意事项
如果是未知版本linux
括号里填写 bionic
如果不清楚版本,使用里面的子命令,lsb_release -cs 会返回当前系统名,修改即可
如果是多行命令, $不需要复制,\ 回车换行
以上面3行举个栗子,中文表示操作
复制echo \ 回车
复制"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ 回车
复制focal 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 镜像
使用Docker主要掌握三个概念,镜像,容器,数据卷
镜像相当于程序的本体,任何制作好的需要在docker运行的程序最终都会成为镜像
使用别人做好的镜像,拉取镜像
docker pull
如果是镜像文件,则使用 docker load 加载镜像
镜像常用命令:
使用docker images --help 查看
查看镜像 docker images
删除镜像 docker rmi 镜像名:TAG
删除所有镜像 docker rmi $(docker images)
启动镜像成为一个容器
docker run -d(运行方式后台) --name 容器名字 -p(小p指定端口) 宿主端口:容器内端口 镜像名
例如nginx 镜像启动
docker run -d --name nginx01 -p 3344::80 nginx
Docker 容器
运行一个镜像就成为了容器
容器常用命令
查看运行的容器 docker ps
查看所有容器:docker ps -a
删除容器:docker rm id
暂停所有容器:docker stop $(docker ps -a -q)
删除所有容器 docker rm $(docker ps -a -q)
进入容器
进入容器修改命令(当我们需要对容器进行操作,修改配置文件等等)
docker exec -it 容器id sh(交互控制台,相当于开启一个新终端)
docker attach 容器id (进入容器正在执行的终端,不会启动新的进程)
Docker 数据卷
容器是运行的镜像,那么容器停止,再次运行,之前的数据呢? 没了,所以需要数据卷存储数据,只要每次运行的容器指定同样的数据卷,就可以使得容器的数据持久化
数据卷可以挂载多个 添加多个 -v 即可,可以挂载文件 -v 数据卷:文件全路径 即可
数据卷常用命令
查看所有数据卷 docker volume ls
查看信息docker volume inspect volumeName
删除未使用的卷docker volume prune
删除卷 docker volume rm volumeName
删除所有卷:
docker stop$(docker ps-a-q) 停止所有容器
docker volume rm $(docker volume ls -q) 删除所有数据卷
挂载数据卷
当docker run 的时候,使用 -v 数据卷名:容器内部路径 即可挂载数据卷
docker run --name 容器名 -p 外部端口:内部端口 -v 数据卷名:/容器内部路径 镜像名:TAG
例如verdaccio/verdaccio 镜像,内部使用4873端口,外部同样使用4873映射(外网访问),-v 挂载数据卷名verdaccio,内部路径/verdaccio
docker run -it --name verdaccio -p 4873:4873 -v verdaccio:/verdaccio verdaccio/verdaccio
进入容器查看内部路径,有时候我们不确定需要映射哪个路径,可以先docker exec -it 容器id sh进入容器查看,确定好路径再重新启动容器
数据卷位置
默认在
/var/lib/docker/volumes
如果指定路径 -v 外部路径/内部路径 卷会变成匿名卷,
有没有指定路径的具名卷?