HemingwayM 2020-07-27
Docker 底层是一个联合文件系统 (UnionFS)
bootfs(boot file system)主要包含 bootloader 和 kernel ,bootloader 主要是用来引导加载 kernel,linux刚启动时会加载bootfs文件系统,
在docker镜像的最底层就是bootfs。这一层与典型的类 unix 是一样的,包含boot加载器和kernel内核,当boot加载完成,整个内核就在内存中了,然后跳转到 0x7c00 将控制权交给内核,卸载boot加载器
boots之上包含的就是典型的linux系统中:/dev /proc /bin /etc 等标准目录和文件
1.docker run <image>
# docker run hello-word
默认从本地拉取镜像,本地仓库没有从远程拉取,然后创建容器并运行
2. docker --help
帮助
3.docker images 列出本地所有镜像
docker images -a < -a 列出所有>
docker images -q 只显示 image_id 默认截取后的12位,
docker images -q --no-trunc 完全显示,不截取
docker images --digests 显示摘要信息
4.docker ps 列出正在运行的容器,-l 最后一次运行的容器,-n 3最后三次 -q 返回容器 id
5.docker run -it 镜像名或id --name 别名
启动交互式终端运行镜像,exit 退出
docker run -d 镜像名或ID (后台运行)
docker run -d 镜像名 /bin/sh -c "echo excute_bash_shell_cmd"
6.查看容器日志
docker logs 容器ID
-t 带时间戳
-f 追加
--tail n 显示 n 条
[ ~]# docker run -d centos /bin/sh -c "echo excute_bash_shell_cmd" 58a5cebb25853fa45d769240057d5f54d1b5db5e9afc871240c50f5cd49f3a8a [ ~]# docker logs -t --tail 1 $(docker ps -lq) 2020-07-26T14:12:56.303710189Z excute_bash_shell_cmd
7.docker stop 容器 ID 或者 docker kill 容器id
8.docker restart 容器 ID
9.容器内执行命令返回结果
docker exec -it 容器ID ls -l /tmp
docker exec -it 容器ID /bin/bash 进入容器启动终端
10. 复制容器里数据
docker cp 容器id /容器内路径 /本机路径
11.端口映射 -p 本机端口 : docker 内实际端口,小p 指定端口, 大P 随机端口
docker run -d -p 2020:8080 tomcat
本机浏览器访问:localhost:2020 即可访问
12.docker 提交镜像 目标镜像名:版本号
docker commit -a=‘author‘ -m=‘descript information‘ 镜像ID @vhs-scan/vhs-scan:1.0
拉取python 3.7 并运行
docker pull python:3.7
docker images -a
[ ~]# docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE python 3.7 22c70bba8283 4 days ago 920MB [ ~]# docker run -d python:3.7 python -c "import time; print(time.time())" b0260da1f7eae6a65a03f458b7b4ccb98de6cdae536929ce36da9b424d2bd08c [ ~]# docker logs -t --tail 1 $(docker ps -lq) 2020-07-26T14:16:57.412054631Z 1595773017.41185
数据持久化:容器卷(类似共享目录)
直接命令添加:
docker run -it -v /本机绝对目录:/docker容器机绝对目录:权限 镜像名
权限:ro 只读,read only
docker run -d -v /home/hostdataVolumn:/home/containVolumn:ro centos
Docker File
docker build -f /home/docker_file -t sq/centos .
docker file 编写
#volume test FROM centos #从哪一个镜像构建,父类镜像 VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"] #多个目录数据卷 CMD echo "finished ,create success" CMD /bin/bash #启动终端 #以上命令等价于 #docker run -it -v /host_docker默认目录:/dataVolumeContainer1 -v /host2:/dataVolumeContainer2 centos /bin/bash10 #docker inspect 镜像名 查看数据卷目录对应,主机目录