dockerhub.com仓库地址
msdn.itellyou.cn BT资源
啥子是容器
容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理
程序: 代码,软件,命令
进程:正在运行的程序
容器和虚拟机的区别
虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
centos6启动流程:开机自检-MBR引导-GRUB菜单-运行系统第一个进程init-加载系统运行级别配置文件-运行脚本(rc.local等)-运行mingetty进程
centos7或8启动流程:开机自检-MBR引导-GRUB2菜单-运行系统第一个进程systemd-加载系统运行级别配置文件-读取系统初始化配置文件-加载/etc/systemd/system目录中的信息-运行mingetty进程
容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程
容器优势: 启动快,性能高,损耗少,轻量级
docker-ce安装
主机名 | 内存 | ip |
---|---|---|
docker01 | 2G | 10.0.0.11 |
docker02 | 2G | 10.0.0.11 |
安装docker-ce
rm -fr /etc/yum.repos.d/local.repo
echo "192.168.13.251 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
tar xf docker_rpm.tar.gz
cd docker_rpm/
yum localinstall *.rpm -y
#安装包在本地
#验证
[root@docker01 ~]# docker version
Client: Docker Engine - Community
Version: 20.10.6
API version: 1.41
Go version: go1.13.15
Git commit: 370c289
Built: Fri Apr 9 22:45:33 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
docker内容
docker是一个cs架构, docker主要:镜像 容器 仓库 网络 存储 监控
docker是一个软件的打包技术
[root@docker02 ~]# docker run -d -p 80:80 docker.mirrors.ustc.edu.cn/library/nginx
7697ad097eda988a6e90aedfc7fed68961a09c55574690931e744141a597326d
#run 创建并启动一个容器
#-d 放后台启动
#-p 端口映射
#docker.mirrors.ustc.edu.cn/library/nginx 镜像地址
#nginx 镜像名称
docker镜像常用命令
#搜索镜像,优先选官方,stars好评数量多
[root@docker02 ~]# docker search centos7
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ansible/centos7-ansible Ansible on Centos7 133 [OK]
paigeeworld/centos7 Centos7 with apache, iperf3, nmap, ssh 5
ryanj/centos7-s2i-nodejs STOP RUNNING YOUR APP BUILDS AS ROOT!! Use t… 5
flyceek/centos7-jdk centos7-jdk 5 [OK]
#拉取镜像(下载镜像),注意版本
[root@docker02 ~]# docker pull ansible/centos7-ansible
Using default tag: latest
latest: Pulling from ansible/centos7-ansible
45a2e645736c: Downloading [================> ] 23.04MB/70.39MB
1c3acf573616: Downloading [==================> ] 21.94MB/59.73MB
edcb61e55ccc: Download complete
cbae31bad30a: Download complete
aacbdb1e2a62: Download complete
fdeea4fb835c: Downloading [=====> ] 7.523MB/69.68MB
#推送镜像(上传镜像)
[root@docker02 ~]# docker push docker.mirrors.ustc.edu.cn/library/nginx
Using default tag: latest
The push refers to repository [docker.mirrors.ustc.edu.cn/library/nginx]
64ee8c6d0de0: Layer already exists
#导入镜像:
[root@docker02 ~]# docker load -i docker_nginx.tar.gz
-i: 指定导入的文件
b67d19e65ef6: Loading layer [==================================================>] 72.5MB/72.5MB
6eaad811af02: Loading layer [==================================================>] 57.54MB/57.54MB
a89b8f05da3a: Loading layer [==================================================>] 3.584kB/3.584kB
Loaded image: nginx:latest
#导出镜像:
[root@docker02 ~]#docker save centos:7 -o docker_centos7.tar.gz
-o: 输出到的文件
#查看镜像列表:#docker images=docker image ls
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.mirrors.ustc.edu.cn/library/nginx latest 62d49f9bab67 5 days ago 133MB
nginx latest 540a289bab6c 18 months ago 126MB
alpine latest b7b28af77ffe 21 months ago 5.58MB
#删除镜像:
[root@docker02 ~]# docker rmi centos:7
Untagged: centos:7
Deleted: sha256:9f38484d220fa527b1fb19747638497179500a1bed8bf0498eb788229229e6e1
Deleted: sha256:d69483a6face4499acb974449d1303591fcbb5cdce5420f36f8a6607bda11854
#镜像打标签
[root@docker02 ~]# docker tag nginx:latest test
[root@docker02 ~]# docker images
nginx latest 540a289bab6c 18 months ago 126MB
test latest 540a289bab6c 18 months ago 126MB
docker容器的常用命令
#创建并运行容器
[root@docker02 ~]# docker run -d -it -p 80:80 nginx:latest
bfb4d27d7f1b3b50b3366424ffd26e50740e7f8d6e2dffc964bc547ee67540f6
-d: 后台运行;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
#创建容器
[root@docker02 ~]# docker create --name test2 nginx
eef703b7412974309a487db3ee832fe02c81dafe73cac320ca1c3c9c7e8ebad2
[root@docker02 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eef703b74129 nginx "nginx -g 'daemon of…" 3 seconds ago Created test2
--name: 为容器指定一个名称;
#启动容器
[root@docker02 ~]# docker start test2
test2
#停止容器
[root@docker02 ~]# docker stop test2
test2
#重启容器
[root@docker02 ~]# docker restart test2
test2
#暂停容器
docker pause test2
#获取容器的日志
docker logs test2
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
#在宿主机和容器之间拷贝文件
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp 96f7f14e99ab:/www /tmp/
-L :保持源目标中的链接
#强制停止容器(杀掉一个运行中的容器)
[root@docker02 ~]# docker kill test2
test2
#查看容器列表
[root@docker02 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eef703b74129 nginx "nginx -g 'daemon of…" 6 minutes ago Exited (137) 49 seconds ago test2
bfb4d27d7f1b nginx:latest "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp vigilant_banach
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
#删除容器
[root@docker02 ~]# docker rm -f test2
test2
-f:通过 SIGKILL 信号强制删除一个运行中的容器。
-l :移除容器间的网络连接,而非容器本身。
-v :删除与容器关联的卷。
#批量删除所有容器 docker rm -f `docker ps -a -q`
#进入正在运行的容器(分配到一个新终端) 这里的/bin/bash在其他环境下需要使用/bin/sh
[root@docker01 ~]# docker exec -it sleepy_hoover /bin/bash
root@1d3a727e5219:/#
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
#进入正在运行的容器(使用相同的终端)
#退出快捷键ctrl +p,ctrl +q 如果用ctrl+d的话会stop容器
#要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕(与screen命令的attach类似)。
[root@docker01 ~]# docker attach heuristic_black
[root@6b77bfcacbde /]#
#容器想要放在后台一直运行的话,那么容器的初始命令,必须夯住(前台运行),否则容器就会退出.
前台运行
nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize
/usr/sbin/sshd -D
#查看容器中运行的进程信息。
[root@docker01 ~]# docker top distracted_villani
UID PID PPID C STIME TTY TIME CMD
root 33280 33260 0 21:38 pts/0 00:00:00 /bin/bash
#提交镜像
[root@docker01 ~]# docker commit -a "wyd" -m "LNMP" a404c6c174a2 Nginx:v1
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
#检查容器里文件结构的更改
[root@docker01 ~]# docker diff mymysql
A /logs
A /mysql_data
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
C /tmp
#获取容器的日志
[root@docker01 ~]# docker logs -f mymysql #跟踪查看容器mymysql的日志输出。
[root@docker01 ~]# docker logs --since="2019-09-10" --tail=10 mymysql #查看容器mymysql从2020年9月10日后的最新10条日志。
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
#将文件系统作为一个tar归档文件导出到本地
[root@docker01 ~]# docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2 #将id为a404c6c174a2的容器按日期保存为tar文件。
[root@docker01 ~]# ls mysql-`date +%Y%m%d`.tar
mysql-20190910.tar
-o :将输入内容写到文件
#查看指定镜像的创建历史
[root@docker01 ~]# docker history LNMP_nginx:v3 #查看本地镜像LNMP_nginx:v3的创建历史
-H :以可读的格式打印镜像大小和日期,默认为true
--no-trunc :显示完整的提交记录
-q :仅列出提交记录ID
#获取容器/镜像的元数据
[root@docker01 ~]# docker inspect LNMP_nginx:v3 #获取镜像LNMP_nginx:v3的元数据
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
#查看容器使用的状态(动态)=监控
[root@docker01 ~]# docker stats wordpress_db_1
--no-stream:静态看状态
#暂停容器中所有的进程(类似于挂起容器)
[root@docker01 ~]# docker pause wordpress_db_1
#恢复容器中所有的进程
[root@docker01 ~]# docker unpause wordpress_db_1
docker port 查看端口(鸡肋)=docker ps -a 也可以看到端口
#用来删除不再使用的 docker 对象
docker image prune #删除 所有未被 tag 标记和未被容器使用的镜像:
docker image prune -a #删除 所有未被容器使用的镜像
docker container prune #删除 所有停止运行的容器
docker network prune #删除 所有网络
docker volume prune #删除 所有未被挂载的卷
docker system prune #删除 docker 所有资源
#将容器重命名
docker rename 原容器名称 新容器名称
#修改初始创建的容器的配置文件及配置信息
docker update test2 --cpus 2 #将容器的cpu升级为2核
docker wait 状态码(鸡肋)=docker ps -a 也可以看到状态码