docker虽然有windows、macos版本,但是只建议在linux上用docker。 因为docker只能在linux中实现容器(其他系统实际上是安装linux虚拟机上使用docker)。
1. docker安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
docker ce脚本会自动安装docker-ce, docker-ce-cli和containerd.io。
- docker-ce:社区版(community edition)的docker engine。
- docker-ce-cli:docker-ce引擎的命令行界面。
- containerd.io:containerd服务(service也称为守护进程),在docker引擎上工作,是docker包必须的。
docker官网提供的docker desktop是包含docker engine, decker cli, docker compose, kubernetes等工具的包。docker desktop个人版免费,高级版收费。
docker基础命令
docker -v :查看docker是否安装,显示安装版本docker version :查看docker详细版本信息docker info :查看docker信息(包括是否正在运行)
docker常用名词
- 容器(container):docker创建的一个实例(相当于一个沙箱,虽然不是虚拟机,但是使用中类似虚拟机),容器间互不影响。
- 镜像(image):类似于虚拟机中的系统镜像,docker根据镜像创建容器。镜像配置了容器的系统版本、基本设置、安装的软件等。
- 仓库(reposity):存放镜像的仓库。
2. docker镜像操作
docker search centos #搜索仓库中是否存在centos镜像docker pull centos #从仓库中获取centos镜像,并下载到本地docker images #查看当前已下载的镜像列表docker rmi centos #删除一个或多个镜像。 -f 可以强制删除
仓库换国内源的方法
- vi /etc/docker/daemon.json
- 在{}内增加一行:
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
3. 容器操作
docker run centos :根据centos镜像创建容器实例
-d :后台运行容器,并返回一个容器id-i :交互式运行容器
- exit:交互模式下,退出并停止容器。
- Ctrl+p,Ctrl+q:交互模式下,只退出容器,不停止容器
-it centos /usr/bin/bash :为容器重新分配一个为输入终端,通常与-t同时使用-p 8080:80 :指定端口映射(把8080端口映射到80) docker run centos python app.py :创建容器,并且在docker中运行一个应用。docker ps :列出当前运行的容器docker ps -a :列出所有容器。同docker container ls -adocker top 容器ID或容器名称 :查看容器内运行的进程。必须是正在运行的容器。docker inspect 容器ID或容器名称 查看容器详细配置信息
docker容器的自动退出
docker会在前置进程(主线程)运行完毕后自动退出。所以任务很简单的容器,比如helloworld,1秒左右就会自动结束。 所以要容器一直运行,就需要有一个常驻前置进程。
有人就用while循环(当然要sleep一下)实现常驻进程。(bash用参数-c执行循环)
docker run -d centos bash -c "while true;do echo hello docker;sleep 1;done"
用交互模式也可以保持docker不退出
docker run -itd centos bash
前台运行一个常驻应用也是也可以的。
容器运行后执行操作
docker attach 容器ID :以交互方式进入到指定容器。退出后容器结束。docker exec 容器ID python app.py :在容器中运行指定的应用或命令。
- -i:交互模式
- -t:指定伪终端
- -d:后台运行
- -w:指定容器内部的工作目录
docker exec -i 容器ID bash :交互方式在容器中运行bash。-it也ok。attach不同,退出后容器不会结束。docker logs 容器ID :查看容器内部的标准输出。docker cp 容器ID :容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机
4. 容器生命周期管理
docker start 容器id :启动已经停止的容器docker stop 容器id :停止运行中的容器docker restart 容器id :重启容器docker kill 容器id :强制停止容器docker rm 容器id :删除已经停止的容器,-f可以强制删除正在运行的容器docker pause 容器id :暂停容器docker unpause 容器id :恢复暂停的容器
更多的容器docker的命令可以参考https://blog.csdn.net/weixin_39895862/article/details/110465890
5. docker服务(service)管理
docker由后台服务端和客户端组成。从docker version和docker info都可以看到,docker包含server和client。
docker的server在linux中以服务(service也称为守护进程daemon)的形式在后台运行。老版本的linux用service命令管理,新版本的linux通常使用systemctl命令管理service。
要使用docker必须先启动docker服务。但是,实际使用中并不需要先启动服务,在使用docker命令时,会自动启动docker服务,并且非常快。对于服务器,通常还是设置自动启动docker服务。
管理serivice的基本命令
systemctl start docker.service
systemctl stop docker.service
systemctl restart docker.service
systemctl kill docker.service
systemctl reload docker.service
systemctl daemon-reload docker.service
systemctl status docker.service
systemctl show docker.service
systemctl list-dependencies docker.service
systemctl list-dependencies --all docker.service
注意:docker有两个service:docker.service和containerd.service。docker.service依赖于containerd.service。所以:
- 启动docker.service就会自动启动containerd.service。反之不行。
- 关闭containerd.service会自动关闭docker.service。反之不行。
服务名称可以省略.service。比如下边命令也是可以的:
systemctl start docker
开机自动启动服务命令
systemctl enable docker.service
systemctl disable docker.service
systemctl is-enabled docker.service
systemctl list-unit-files | grep enabled
$ systemctl list-unit-files --type=service
查看当前系统服务状态列表
systemctl --type=service
systemctl --failed
systemctl --type=service --state=active
systemctl --type=service --state=running
systemctl详细命令见http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
|