启动
systemctl start docker
停止
systemctl stop docker
重启
systemctl restart docker
开机自启动
systemctl enable docker
查看状态
systemctl status docker
查看概要消息
docker info
查看总体帮助文档
docker --help
查看docker帮助文档
docker 命令 --help
镜像操作,拉取镜像前最好配置有个镜像加速器,在阿里云里有自己的加速器,然后修改docker配置文件
vi /etc/docker/daemon.json
{
"registry-mirrors": "自己的镜像地址"
}
重载系统服务配置
systemctl daemon-reload
重启docker
systemctl restart docker
拉取hello-world镜像,默认下载最新的,pull 名字:版本号可以下载指定的
docker pull "hello-world"
查看本地所有镜像
docker images -a
查询某个镜像名字,因为国内网络的原因可能会search不出来,可以到官网上看
docker search xxx
查看镜像/容器/数据卷所占的空间,也能看有多少个镜像
docker system df
删除某个镜像
普通删除,强制删除就加一个-f
docker rmi 容器ID
docker的虚悬镜像是什么
仓库名、标签都是<none>的镜像,俗称虚悬镜像dangling image
创建容器
参数
-name="容器新名字" 为容器指定一个名称
-d 后台运行容器并返回容器id
也即启动守护式容器(后台运行)
-i 以交互式模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端,通常与-i同时使用
也即启动交互式容器(前台有伪终端,等待交互)
-P 随机端口映射 大写P
-p 指定端口映射 小写p
启动/创建容器
docker run -it ubuntu /bin/bash
run启动容器
-it出现一个伪窗口,类似进入一个窗口像是linux命令行
/bin/bash 指定解释器
列出当前所有正在运行的容器
docker ps
退出容器
run进去的容器,exit退出,容器会停止
run进去的容器,ctrl + p + q退出。容器不停止
启动已经停止运行的容器
docker start 容器id或容器名
停止/重启/强制停止容器
docker stop/restart/kill 容器id或容器名
删除已经停止的容器
docker rm 容器id
守护式容器(后台服务器)
docker run -d 容器名
docker ps是看不到的,-a才能看到
docker容器在后台运行,就必须有一个前台进程,运行命令如果不是那些一直挂起的命令(tail,top)就是会自动退出的
方案:要运行的程序以前台进程的形式运行,常见就是命令行模式(有些容器-d就会自动结束的,有些就会一直挂起)
查看容器日志
docker logs 容器id
查看容器内部细节
docker inspect 容器id
重新进入容器(ctrl + p + q退出的/-d的)并以命令行交互
docker exec -it 容器id /bin/bash
docker attach 容器id
区别:attach直接进入容器启动命令的终端,不会启动新进程用exit退出会导致容器停止
exec是在容器中打开新的终端,并且可以启用新的进程,exit退出,不会导致容器停止
容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
导入和导出容器
docker export 容器id > 文件名.tar
cat 文件名.tar | docker import - 镜像名(一般是镜像用户/镜像名):镜像版本号
export导出容器的内容流作为一个tar归档文件对应import命令
import从tar包中的内容创建一个新的文件系统再导入为镜像对应export
docker export 425943fc384d > abc.tar
cat abc.tar | docker import - lzh/ubuntu:1.1
UnionFS(联合文件系统):Union(UnionFS)是一种分层,轻量级并且高性能的文件系统。它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是docker镜像的基础,镜像可以通过分层来进行过滤,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像
一次同时加载多个文件系统,但外面看来只能看到一个文件系统,联合加载会把各种文件系统叠加起来,最终的文件系统会包含所有底层的文件和目录
docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常被称作容器层,容器层之下的都叫镜像层
docker的commit命令
docker commit 提交容器副本使之成为一个新的镜像
docker commit -m="提交的描述信息"-a="作者"容器id 要创建的目标镜像名:标签名
docker commit -m="tesx01images"-a="lzh" 2c77d2cfd9ad lzh/test01:1.0.0
基于当前容器创建一个新的镜像,新功能增强
docker commit options 容器id repositiory\[:tag]
将本地镜像推送/拉取到阿里云镜像仓库
在阿里云-->容器镜像服务-->实例列表-->镜像仓库-->基本信息这里有基于自己仓库的教程
私服版本的镜像仓库
docker pull registry
docker run -d -p 5000:5000 -v /lzh/myregistry:/tmp/registry --privileged=true registry
默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便宿主机联调
-p 5000:5000 左边是主机的,右边是容器的
这个是自己创建的/lzh/myregistry,没有的话也会自动创建
提交镜像
docker commit -m='tset02' -a='lzh' 2c77d2cfd9ad lzh/test02:1.1.1
测试验证私有仓库是否搭建成功的核心命令
curl -XGET http://172.26.235.122:5000/v2/_catalog
/v2/_catalog是:Docker 官方私有仓库(registry 镜像)自带的固定 API 接口地址,是官方写死的标准查询入口,你运行 registry 容器,它就自动存在了
给本地镜像打「专属私有仓库标签」
docker tag lzh/test02:1.1.1 172.26.235.122:5000/lzh/test02:1.1.1
Docker 规定:想把镜像推送到私有仓库,必须给镜像打上 仓库IP:端口/镜像名:版本 格式的标签,否则 Docker 不知道该把镜像推到哪里。
取消docker默认不允许http方式推送镜像,通过配置项来生效,重启docker
vi /etc/docker/daemon.json
加上这行 "insecure-registries": "172.26.235.122:5000"
推送导私服库
docker push 172.26.235.122:5000/lzh/test02:1.1.1
curl验证有什么镜像
curl -XGET http://172.26.235.122:5000/v2/_catalog
pull到本地运行
docker pull 172.26.235.122:5000/lzh/test02:1.1.1
容器卷
docker挂载主机目录访问如果出现cannot open directory
解决方法:在挂载目录后多加一个--privileged=true参数即可
卷就是目录文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFile system提供一些用于持续存储或共享数据的特性:
卷的目的就是数据持久化,完全独立于容器的生存周期,因此docker不会再容器输出时删除其挂载的数据卷
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
特点:
1.数据卷可在容器之间共享或重用数据
2.卷中的更改可以直接实时生效
3.数据卷中的更改不会包含在镜像的更新中
4.数据卷的生命周期一直持续到没有容器使用它为止
宿主机vs容器之间映射添加容器卷
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker inspect获取详细信息
读写规则映射添加说明
docker run -it --privileged=true -v /tmp/host_date:/tmp/docker_date:ro --name=lzh01 ubuntu
ro = read only 只读,限制只是限制容器
卷的继承和共享
docker run -it --privileged=true --volumes-from lzh02 --name=lzh02001 ubuntu /bin/bash
--volumes-from lzh02:这个就是继承的参数
docker常规安装
搜索镜像-->拉取镜像-->查看镜像-->启动镜像-->停止容器-->移除容器
docker search tomcat
docker pull tomcat
docker images
解决mysql问题
docker run -d -p 3306:3306 --privileged=true
-v /mysql01/mysql/log:/var/log/mysql
-v /mysql01/mysql/data:/var/lib/mysql
-v /mysql01/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:8.0
中文乱码问题
cd /mysql01/mysql/conf
vim my.cnf
client
default_character_set=utf8
mysqld
collation_server = utf8_general_ci
character_set_server = utf8