导图社区 docker
docker的学习笔记,常用组件的安装命令没有完善
编辑于2020-06-06 23:44:20docker(基于centos)
docker架构
docker三大要素
架构图
三大要素:仓库、镜像、容器
底层运行原理
docker和虚拟机的对比图
docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的是宿主机的硬件资源。因此在cpu、内存利用率上docker都有明显优势
docker利用的是宿主机的内核,而不需要Guest OS;因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻、加载操作系统内核这个比较耗费时间的过程,这个过程时分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器时几秒钟。
说明:GuestOS:VM(虚拟机)里的的系统(OS);HostOS:物理机里的系统(OS);
Centos安装docker步骤
确认Linux的内核要高于3.10
uname -r
确认Linux版本6.5之后
cat /etc/redhat-release
简洁版的需要更新命令安装包
sudo yum update
安装vim编辑器
yum -y install vim
Linux关机命令
shutdown -h now #立即关机(shutdown -h 10 #10分钟后关机)
poweroff
切换用户
su username后面不带username用户名的时候就默认切换到root账号
安装之前确认清除系统残留
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装下载Docker依赖的工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源
阿里云的软件源(推荐)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
官网(国外服务器不推荐)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
配置环境
安装Docker(CE-社区版)
sudo yum install docker-ce
如果需要安装特定版本,则输入命令查看版本
yum list docker-ce --showduplicates | sort -r
安装指定docker版本的,在后面增加-version
sudo yum install docker-ce-version
配置国内镜像加速器
去阿里云注册一个镜像加速器
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://a83ipffx.mirror.aliyuncs.com"]}EOF重新加载sudo systemctl daemon-reload
Docker启动服务
sudo systemctl start docker如果需要加入开机启动sudo systemctl enable docker
重启docker
systemctl restart docker
宿主机连接虚拟机
如果是安装再虚拟机上的,要在Linux上输入命令ip addr查看本机的ipens32上有个ip,连接的就是这个;有些说是ens33
安装docker
docker一些常用命令
docker --help
docker images
列出本地主机上的镜像;镜像是很多层文件,一层层叠加起来的
options说明:-a:列出本地所有的镜像(含中间映像层)-q:只显示镜像ID--digests:显示镜像的摘要信息--no-trunc:显示完整的镜像信息
docker search [options] xx镜像名
用来查询中央仓库的镜像
options说明:--no-trunc:显示完整的镜像描述-s:列出收藏数量不小于指定值的镜像;docker search -s 30 tomacat--automated:只列出automated build类型的镜像【一般是官方的】
删除容器和镜像
删除镜像
docker rmi [image]docker image rm [image]
批量删除镜像【命令嵌套】
docker rmi -f$(docker images -q)
删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]Options:-f, --force 是够强制终止并删除一个运行中的容器;-l, --link 删除容器的链接,但是保留容器;-v, --volumes 删除容器挂载的数据卷。
先暂停正在运行的容器
docker stop 容器ID\容器名
清除网络
docker network disconnect --force bridge 容器ID\容器名
再强制删除
docker rm -f 容器ID\容器名
批量删除容器(两个命令)
docker rm -f $(docker ps -a -q)
docker ps -a -q| xargs docker rm
docker容器数据卷
容器里面的数据问题:1、将运用与运行的环境打包形成容器运行,运行可以伴随这容器,但是我们对数据希望是持久化的2、容器之间希望有可能共享数据3、docker容器产生的数据,如果不通过docker commit生产新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删掉以后,数据自然就没有了
数据卷的作用:
卷就是目录或者文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或者共享数据的特性: 卷的设计目的就是数据的持久化,完全独立于容器的生成周期,因此docker不会再容器删除时删除其挂载的数据卷特点:1、数据卷可在容器之间共享或重用数据2、卷中的更改可以直接生效3、数据卷中的更改不会包含再镜像的更新中4、数据卷的生命周期一直持续到没有容器使用它为止
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名/容器ID
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名/容器ID
代表容器只有读的权限,read only
新建并启动容器docker run [options] xx镜像
options说明:--name alias:为容器制定一个别名-d:后台运行容器,并返回容器ID,也即启动守护式容器-i:以交互模式运行容器,通常鱼-t同时使用-t:为容器重新分配一个伪输入终端,通常与-i同时使用-P:随机端口映射【大写P】-p:制定端口映射【小写p】,有4种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
启动交互式容器
如:docker run -it centos /bin/bash以交互模式启动一个容器,在容器内执行/bin/bash命令
启动守护式容器
使用镜像centos以后台模式启动一个镜像docker run -d centos 问题:启动后docker ps -a 进行查看,会发现容器已经退出了很重要的说明一点:docker容器后台运行,就必须有一个前台进程。容器进行的命令如果不是那些一直挂起来的命令(比如运行top,tail),就会自动退出的。 这个是docker的机制问题,比如你的web容器,以nginx为例,正常情况下,我们配置启动服务只需要启动响应的service即可。例如service nginx start但是这样做nginx为后台进程模式运行,就导致docker前台没有运用的应用,这样的容器后台启动后,会立即自杀,因为他觉得他没事可做了。所以最佳的解决方案是,将你要运行的程序以前台进程的形式运行
启动容器docker start 容器ID/容器名重启容器docker restart 容器ID/容器名停止容器docker stop 容器ID/容器名 【相当于正常电脑关机】强制停止docker kill 容器ID/容器名 【相当于粗暴拔电源关机】
查看docker正常运行的进程docker ps
options说明:-a:列出当前所有正在运行的容器 + 历史上运行过的-l:显示最近创建过的容器-n:显示最近n个创建的容器-q:静默模式,只显示容器编号--no-trunc:不截断输出
查看容器日志
docker logs -f -t --tail 容器ID
options说明:-t是加入时间戳-f跟随最新的日志打印--tail数字显示最后多少条
进出容器的命令
退出容器
exit 停止并,退出该容器ctrl+p+q 只是退出docker容器
重新进入容器
docker exec -it 容器ID bashShell
docker attach 容器ID
区别:attach直接进入容器启动命令的终端,不会启动新的进程exec是在容器中打开新的终端,并且可以不启动新的进程
查看docker容器内部细节
docker inspect 容器ID/容器名称
从容器内拷贝文件到主机上
docker cp 容器ID:文件路径 宿主机路径
镜像安装步骤
拉取镜像
docker pull mysql:latest 8.0.18docker pull redis:5.0.8docker pull centos:8docker pull nginx:1.17docker pull nacos/nacos-server
查看下载的镜像
docker images
建立挂载的数据卷
先建立映射数据卷的目录如:
mkdir -p /var/cnmp/mysql/data
执行命令建立容器如:
docker run -di -v D:/openSources/docker/mysql8/data:/var/lib/mysql -v D:/openSources/docker/mysql8/conf/my.cnf:/etc/mysql/my.cnf --privileged=true --restart=always --name mysql8 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql --lower_case_table_names=1
一些常用组件的安装细节
mysql
docker pull mysql:8.0.18
在主机上建好要对应挂载的目录
mkdir -p /home/mysql/confmkdir -p /home/mysql/logsmkdir -p /home/mysql/data
docker run -p 123456:3306 将宿主机123456端口映射到docker容器的3306端口--name mysql 运行服务容器名称--privileged=true 获取宿主机的特殊权限(root权限)--restart=always 重启服务器容器名字保持-v /home/mysql/conf:/etc/mysql/conf.d 将主机/home/mysql目录下的conf/my.cnf挂载到容器的/etc/mysql/conf.d-v /home/mysql/logs:/logs 将主机/home/mysql目录下的logs目录挂载到容器的/logs-v /home/mysql/data:/var/lib/mysql 将主机/home/mysql目录下的data目录挂载到容器的/var/lib/mysql-e MYSQL_ROOT_PASSWORD=123456 初始化root用户密码-d mysql:latest 后台运行mysql镜像
重新给mysql创建用户
redis
docker run-v /hoem/redis/data:data-v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf-d redis:3.2 redis_server /usr/local/etc/redis/redis.conf--appendonly yes 持久化模式
nginx
nacos
拉取镜像
docker pull nacos/nacos-server
创建挂载目录
mkdir -p /home/nacos/logs/ #新建logs目录mkdir -p /home/nacos/init.d/ vim /home/nacos/init.d/custom.properties #修改配置文件
启动容器