二.docker安装与常用命令
二.docker安装与常用命令
- 1.初始环境安装
- 1)先安装必要的依赖包
- 2)添加docker阿里云 GPG 密钥、设置stable 仓库
- 2.安装docker
- 1)执行如下命令安装:
- 2)查看安装版本及运行状态:
- 3)安装历史版本的docker方法:
- 4)固定docker版本,不自动更新
- 5)设置非root用户的权限
- 6)安装docker-compose
- 7)阿里云镜像加速器的配置
- 8)Docker的测试
- 9)卸载 Docker
- 3.docker常用命令
- 1)帮助启动类命令
- 2)镜像命令
- 3)容器命令
Docker依赖于已存在并运行的Linux内核环境,所以docker必须部署在Linux内核的系统上。Window系统需先安装虚拟机,通过虚拟机中Linux部署。
1.初始环境安装
安装docker容器需要先配置好一台ubuntu服务器,并配置好网络连接。Ubuntu中使用apt来安装软件包,Red Hat、CentOS使用rpm或yum来安装软件包
1)先安装必要的依赖包
- apt install gcc
- apt install g++
- apt install yum-utils
- sudo apt update
- sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
2)添加docker阿里云 GPG 密钥、设置stable 仓库
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

2.安装docker
1)执行如下命令安装:
sudo apt-get update
sudo apt install docker-ce docker-ce-cli containerd.io

2)查看安装版本及运行状态:
docker --version
sudo systemctl status docker

3)安装历史版本的docker方法:
apt list -a docker-ce ## 查看 Docker 软件源中所有可用的版本
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io

4)固定docker版本,不自动更新
sudo apt-mark hold docker-ce
5)设置非root用户的权限
默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。
想要以非 root 用户执行 Docker 命令,需要将用户添加到 Docker 用户组,该用户组在 Docker_ce 软件包安装过程中被创建。输入:
sudo usermod -aG docker $USER ## $USER是一个环境变量,代表当前用户名。
执行后重新登录用户
6)安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

7)阿里云镜像加速器的配置
拉取 hub.docker.com 的镜像,会发现速度很慢,是因为有墙。可以配置阿里云镜像加速器。
阿里云地址:https://promotion.aliyun.com/ntms/act/kubernetes.html
控制台->容器镜像服务->镜像加速器->获取加速地址

vim /etc/docker/daemon.json
加入配置文件内容如下:
{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://jwg89vdq.mirror.aliyuncs.com"]
}
重启docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
8)Docker的测试
docker container run hello-world

9)卸载 Docker
停止所有正在运行的容器,并且移除所有的 docker 对象:
docker container stop $(docker container ls -aq)
docker system prune -a --volumes
使用apt像卸载其他软件包一样来卸载 Docker:
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo apt autoremove
3.docker常用命令
1)帮助启动类命令
启动docker:sudo systemctl start docker
停止docker:sudo systemctl stop docker
重启docker:sudo systemctl restart docker
查看docker状态:sudo systemctl status docker
开机启动:sudo systemctl enable docker
禁用开机自启动:sudo systemctl disable docker
查看docker概要信息:sudo docker info
查看docker总体帮助文档:sudo docker –help
查看docker命令帮助文档:sudo docker <命令> --help
2)镜像命令
-
列出本地主机上的镜像:
docker images 或使用 -a 参数查看所有镜像(包括中间镜像层):docker images -a
REPOSITORY:镜像的仓库名称
TAG:镜像的标签
IMAGE ID:镜像的唯一标识 ID
CREATED:镜像创建的时间
SIZE:镜像的大小 -
在官方仓库中搜索某个镜像:
docker search –limit 列出的镜像数 镜像名字
NAME:镜像名称
DESCRIPTION:镜像的简要描述
STARS:受欢迎程度(星标数)
OFFICIAL:是否为官方镜像([OK] 表示官方)
AUTOMATED:是否为自动化构建的镜像 -
镜像下载:
docker pull 镜像名字[:TAG]
没有TAG就是下载最新版 -
查看 Docker 整体磁盘使用情况:
docker system df -
删除单个镜像:
docker rmi -f 镜像ID -
删除多个镜像:
docker rmi -f 镜像名1:TAG 镜像名2:TAG -
删除全部镜像:
docker rmi -f $(docker images -qa)
3)容器命令
-
新建+启动容器:
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS说明(常用):有些是一个减号,有些是两个减号
-d:后台运行容器。
–name:为容器指定一个名称。
-v:挂载一个卷(目录或文件映射)。
-e:设置环境变量。
–rm:容器停止后自动删除。
-it:以交互模式运行容器(通常用于终端操作)。
-p:映射主机端口到容器端口。

示例命令:
启动一个 Nginx 容器并后台运行:docker run -d --name mynginx -p 80:80 nginx 启动一个带交互终端的 Ubuntu 容器:
docker run -it --name myubuntu ubuntu /bin/bash 挂载本地目录并运行容器:
docker run -d --name myapp -v /host/data:/container/data -p 3000:3000 myapp 设置环境变量并运行容器:
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=123456 mysql 容器退出后自动删除:
docker run --rm -it ubuntu /bin/bash -
列出当前所有正在运行的容器:
docker ps [OPTIONS]
OPTIONS说明(常用):
-a :列出当前所有正在运行的容器+历史上运行过的
-l :显示最近创建的容器。
-n:显示最近n个创建的容器。
-q :静默模式,只显示容器编号。 -
退出容器:
方式一:exit:run进去容器,exit退出,容器停止
方式二:ctrl+p+q:run进去容器,ctrl+p+q退出,容器不停止 -
启动已停止运行的容器:
docker start 容器ID或者容器名 -
重启容器:
docker restart 容器ID或者容器名 -
停止容器:
docker stop 容器ID或者容器名 -
强制停止容器:
docker kill 容器ID或容器名 -
查看所有容器(运行中和已停止):
docker ps -a -
删除已停止的容器:
docker rm 容器ID -
一次性删除多个容器实例:
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm -
设置自动重启:
#重启策略选项
–restart=no # 不重启(默认)
–restart=always # 总是重启
–restart=on-failure # 失败时重启(可指定最大重试次数)
–restart=unless-stopped # 除非手动停止,否则总是重启
#容器启动时设置docker run -d --name mysql-master --restart=always -e MYSQL_ROOT_PASSWORD=your_password -p 3306:3306 mysql:8.0#为现有容器设置重启策略
docker update --restart=always mysql-master -
启动守护式容器(后台服务器):
docker run -d 容器名
注意:Docker容器后台运行,就必须有一个前台进程.容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。最佳的解决方案是,将你要运行的程序以前台进程的形式运行,常见就是命令行模式,表示我还有交互操作。redis 前后台启动演示case:
前台交互式启动:docker run -it redis:6.0.8
后台守护式启动:docker run -d redis:6.0.8 -
查看容器日志:
docker logs 容器ID -
实时查看容器日志:
docker logs -f 容器ID -
查看容器内运行的进程:
docker top 容器ID -
查看容器内部细节:
docker inspect 容器ID -
进入正在运行的容器并以命令行交互:
docker exec -it 容器ID bashShell

重新进入:docker attach 容器ID
上述两个进入方式区别:
1)attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止。
2)exec 是在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止。(建议)
例:进入进入redis服务
docker exec -it 容器ID /bin/bash
docker exec -it 容器ID redis-cli
一般用-d后台启动的程序,再用exec进入对应容器实例 -
从容器内拷贝文件到主机上:
docker cp 容器ID:容器内路径 目的主机路径 -
导入和导出容器:
export 导出容器的内容留作为一个tar归档文件[对应import命令]
import 从tar包中的内容创建一个新的文件系统再导入为镜像[对应export]
例:docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
