run的运行流程图
docker是怎么工作的
Docker为什么比虚拟机快
- Docker有着比虚拟机更少的抽象层。由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。
- Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。
docker常用命令
docker version
docker info
docker 命令 --help
docker images #查看所有本地主机上的镜像
TAG:镜像的标签
image id 镜像的id
size 镜像的大小
-q只显示镜像的id
-a列出所有镜像
docker search 搜索镜像
sudo docker search MysqL
通过filter过滤
sudo docker search MysqL --filter=stars=9000 搜索版本号大于9000的
sudo docker pull MysqL
sudo docker pull MysqL:5.7 指定版本下载(需要在官网上看版本号是否存在)
分块存,更新时候只用更新部分文件即可。
sudo docker rmi -f 6c20ffa54f86
删除指定image
容器命令
sudo docker pull centos
创建一个centos镜像
docker run 可选参数 image
可选参数
– name =‘名字’
-d 后台方式运行
-it 交互方式运行
-p 主机端口:容器端口
zhou@zhou-virtual-machine:~$ sudo docker run -it centos
[root@2556946e064d /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@2556946e064d /]# exit
exit
zhou@zhou-virtual-machine:~$
列出所有运行的容器
docker ps
-a 加上历史运行过的容器
-n = ? 显示最近创建的容器
-q 只显示容器运行的编号
sudo docker start/stop/restart/kill +容器id
后台常用命令
sudo docker run -d centos
再用docker ps查看运行中的容器,发现centos停止了
原因: docker容器使用后台运行,必须要有一个前台进程,docker如果发现没有前台应用,就会自动停止
查看日志
sudo docker run -d centos /bin/sh -c “while true;do echo zhoudage;sleep 1;done;”
sudo docker logs -tf --tail 10 da55ebfc18ec(容器id)
zhou@zhou-virtual-machine:~/Documents$ tail -c 4 test.md
12
-n 数字 代表最后几行
-f 循环读取
查看容器中的进程信息ps
sudo docker top da55ebfc18ec(容器id)
zhou@zhou-virtual-machine:~/Documents$ sudo docker top da55ebfc18ec
UID PID PPID C STIME TTY TIME CMD
root 97980 97952 0 15:44 ? 00:00:00 /bin/sh -c while true;do echo zhoudage;sleep 1;done;
root 99636 97980 0 16:03 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
查看镜像的元数据
zhou@zhou-virtual-machine:~/Documents$ sudo docker inspect centos
[
{
"Id": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
"RepoTags": [
"centos:latest"
],
"RepoDigests": [
"centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1"
],
"Parent": "",
"Comment": "",
"Created": "2020-12-08T00:22:53.076477777Z",
"Container": "395e0bfa7301f73bc994efe15099ea56b8836c608dd32614ac5ae279976d33e4",
"ContainerConfig": {
"Hostname": "395e0bfa7301",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"/bin/bash\"]"
],
"Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201204",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"DockerVersion": "19.03.12",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Cmd": [
"/bin/bash"
],
"Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"org.label-schema.build-date": "20201204",
"org.label-schema.license": "GPLv2",
"org.label-schema.name": "CentOS Base Image",
"org.label-schema.schema-version": "1.0",
"org.label-schema.vendor": "CentOS"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 209348104,
"VirtualSize": 209348104,
"GraphDriver": {
"Data": {
"MergedDir": "/var/snap/docker/common/var-lib-docker/overlay2/d4ad4eabd568c9e2162cdef7af295ae66854f24492cdebe73703487642099c4d/merged",
"UpperDir": "/var/snap/docker/common/var-lib-docker/overlay2/d4ad4eabd568c9e2162cdef7af295ae66854f24492cdebe73703487642099c4d/diff",
"workdir": "/var/snap/docker/common/var-lib-docker/overlay2/d4ad4eabd568c9e2162cdef7af295ae66854f24492cdebe73703487642099c4d/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
进入当前正在运行的容器命令
方式一 sudo docker attach 容器id
进入容器正在执行的终端,不会启动新的进程
方式二 sudo docker exec -it da55ebfc18ec bash
进入容器后开启一个新的终端(可以在里面操作 常用)
将容器里面的文件拷贝出来到主机上
sudo docker cp da55ebfc18ec(容器id):文件路径 主机路径
部署 Nginx镜像实战
安装Nginx
sudo docker pull Nginx
开启Nginx后台运行
sudo docker run -d -it --name Nginx01 -p 3344:80 Nginx
-p 主机端口号:容器端口号 --name 指定名字
curl localhost:3344
进入Nginx容器
sudo docker exec -it 8090d13f1dc5 bash
部署tomcat
sudo docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
Digest: sha256:1af502b6fd35c1d4ab6f24dc9bd36b58678a068ff1206c25acc129fb90b2a76a
Status: Image is up to date for tomcat:latest
docker.io/library/tomcat:latest
开启后台运行tomcat :
sudo docker run -d -name tomcat01(名字) -p 3344:8080 tomcat
但是此时访问http://localhost:3344/ 会报404错误,因为此tomcat版本为阿里云精简版,能省的功能都省了
sudo docker exec -it tomcat01 bash 进入tomcat01容器
webapps文件夹为空
root@9ec0d9350f38:/usr/local/tomcat/webapps.dist# cp -r ./* …/webapps/
docker镜像
commit镜像
把自己修改过的镜像发布,或者已经安装好、配置好的镜像环境拷贝到其它主机上时
sudo docker commit -a=“zhoudage” -m=“webapps add web” 9ec0d9350f38 tomcat_web:2.0
-a= “作者名字”
-m = “描述信息”
9ec0d9350f38(容器id) tomcat_web:2.0(新名字:版本号)
保存当前容器的状态,就像vm的快照一样,方便迁移
数据卷技术(文件挂载)
sudo docker run -it -v /home/zhou/Documents/testCentos:/home/ centos bash
-v 主机目录:centos容器目录
需要使用绝对路径,否则会报错
使用sudo docker inspect centos 可以查看具体挂载的地方
docker 理念:将应用和环境打包成一个镜像
当是把docker中的容器删除了,容器所产生的数据也就没了
需要将docker容器中产生的数据同步到本地,这就用到了数据卷技术
配置MysqL实战
sudo docker run -d -it -p 10000:3306 -v /home/zhou/Documents/MysqL/conf:/etc/MysqL/conf.d -v /home/zhou/Documents/MysqL/data:/var/lib/MysqL -e MysqL_ROOT_PASSWORD=zhoudage --name MysqL01 MysqL
-e MysqL_ROOT_PASSWORD= 使用MysqL前先设置密码
进入 MysqL
sudo docker exec -it 15bd405a524c bash
MysqL -u root -p
创建数据库
creat database zhouTest;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。