1. Docker基本组成
- 镜像(image):模板。通过这个模板创建容器服务。通过一个镜像可以创建多个容器,最终项目运行在容器中。
- 容器(container):利用容器技术,独立运行一个或者一组应用,通过镜像来创建。
- 仓库(repository):存放镜像。分为共有仓库和私有仓库。默认是国外的,需要配置镜像加速。
2.阿里云镜像加速
略
3.帮助命令
docker version # 显示docker版本信息
docker info # 显示docker系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
帮助文档:reference中command-lines中查找命令:https://docs.docker.com/engine/reference
4.镜像命令
- docker images 查看所有本地主机上的镜像
REPOSITORY # 镜像的仓库源
TAG # 镜像的标签
IMAGE ID # 镜像的id
CREATE # 镜像的创建时间
SIZE # 镜像的大小
# 可选项
Options:
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像的id
docker images -aq # 联合使用,显示所有的镜像
- docker search 搜索镜像
# 可选项
--filter=STARS=3000 # 搜索出来的是STARS大于3000的镜像eg:docker search mysql --filter=STARS=3000
- docker pull 下载镜像
docker pull 镜像名[:tag] # eg:docker pull mysql:5.7
[root@host-10-121-1-56 ~] # docker pull mysql
Using default tag: latest # 若不写tag,默认下载latest最新版本镜像
latest: Pulling from library/mysql
e1acddbe380c: Pull complete # 分层下载,docker images的核心(可以共用,节省内存)
bed879327370: Pull complete
03285f80bafd: Pull complete
ccc17412a00a: Pull complete
1f556ecc09d1: Pull complete
adc5528e468d: Pull complete
1afc286d5d53: Pull complete
6c724a59adff: Pull complete
0f2345f8b0a3: Pull complete
c8461a25b23b: Pull complete
3adb49279bed: Pull complete
77f22cd6c363: Pull complete
Digest: sha256:d45561a65aba6edac77be36e0a53f0c1fba67b951cb728348522b671ad63f926 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
docker pull mysql == docker pull docker.io/library/mysql:latest
- docker rmi:删除镜像
docker rmi -f 镜像id # 删除指定镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id # 删除多个镜像
docker rmi -f $(docker images -aq) # 删除所有镜像
5.容器命令
有了镜像才可以创建容器!
- 新建容器并启动
docker run [可选参数] image
# 参数说明
--name="NAME" # 给容器命名,用区分容器
-d # 后台方式运行,必须要有一个前台进程,若无前台应用,就会自动停止
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (√常用)
-p 容器端口
容器端口
-P # 随机指定端口
启动并进入容器
[root@host-10-121-1-56 ~]# docker run -it centos /bin/bash 进入容器
[root@e616af68ddc4 /]# ls 容器内的centos,基础版本,很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@e616af68ddc4 /]# exit 从容器中退回主机
exit
[root@host-10-121-1-56 ~]#
- 列出所有运行的容器
docker ps # 查看正在运行的容器
docker ps -a # 查看曾经运行过的容器
docker ps -n=? # 显示最近n个运行过的容器
docker ps -aq # 只显示曾经运行过的容器的id
- 退出容器
exit # 容器停止并退出
ctrl+P+Q # 容器不停止并退出
- 删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器
docker rm -f 容器id # 不论容器是否正在运行,强制删除(f=force)
docker rm $(docker ps -aq) # 删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
- 启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前运行的容器
6.常用的其它命令
- 查看日志命令
-tf # 显示日志
--tail number # 要显示的日志条数
docker logs -tf --tail number 容器id
- 查看容器中的进程信息
top 容器id
- 查看镜像元数据
docker inspect 容器id
- 进入当前正在运行的容器
docker exec -it 容器id bin/bash #进入容器后开启新的终端,可以在里面操作(√常用)
docker attach 容器id bin/bash #进入容器正在执行的终端,不会启动新的进程
- 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 主机路径
7.提交镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
8.容器数据卷
数据需要持久化和同步操作,且容器间也可数据共享,所以不可以将数据放在容器中。
数据卷技术:Docker容器中产生的数据,同步到本地。
目录的挂载:将容器内的目录,挂载到Linux上。
- 使用数据卷
# 方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录 容器id /bin/bash
# 启动起来之后可以通过docker inspect 容器id 查看“Mounts”挂载信息
- 具名挂载和匿名挂载
# 匿名挂载
-v 容器内路径
docker run -d -P --name ngnix01 -v /etc/ngnix ngnix
# 查看所有的volume(-v的v)情况
docker volume ls
# 具名挂载(√常用)
-v 卷名:容器内路径
docker run -d -P --name ngnix01 -v juming-nginx:/etc/ngnix ngnix
juming-nginx前面不加/,加了/表示绝对路径,在方式一中使用
9.Dockefile
docker镜像的构建文件,是一段命令脚本~
# Dockerfile文件,名字为Dockerfile1
# 文件中的内容:指令(大写)、参数
FROM centos # 选择镜像
VOLUME ["volume01","volume02"] # 匿名挂载,生成镜像的时候自动挂载的数据卷目录
CMD echo "------end-------"
CMD /bin/bash
# 构建
docker build -f Dockerfile1 -t gali/centos .
10.数据卷容器
数据卷的生命周期一直持续到没有容器使用为止。
但是一旦持久化到了本地,本地的数据是不会删除的。