docker基础

启动

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

相关推荐
harmony&10 小时前
Docker 容器技术从入门到实战:容器、网络、存储与监控全解析
docker·云原生
分布式存储与RustFS11 小时前
RustFS 生命周期与分层:让冷数据自动搬家、热数据自己回家
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
阿里云云原生15 小时前
从 Inform 到 Operate:构建可持续运行的云成本巡检机制与 Mission 调度
云原生
再卷还是菜21 小时前
Cephfs总结及kubernetes+Cephfs的整合项目
云原生·容器·kubernetes
大大大大晴天️1 天前
从 HDFS 到对象存储:计算存储分离如何重塑云原生大数据底座
大数据·云原生
阿里云云原生2 天前
Agent 观测与优化三城巡演丨第二站深圳精彩回顾 & PPT 下载
云原生
Henry-SAP2 天前
AI产业迎来标准化与商业化双突破
人工智能·云原生·sap·erp
报错小能手2 天前
Kubernetes入门实战课 3
云原生·容器·kubernetes
2601_962219013 天前
版本平滑升级架构:万象生鲜系统 V4.3.3 迭代无停机更新技术拆解
微服务·云原生·架构