Martind的博客

路遥知Martin

docker学习

centso安装docker


sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo


sudo yum-config-manager --enable docker-ce-edge
sudo yum makecache fast 
sudo yum install docker-ce


安装ubuntu
docker pull ubuntu:16.04


遇到问题
Warning: failed to get default registry endpoint from daemon (Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?). Using system default: https://index.docker.io/v1/
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?


解决办法:
sudo groupadd docker
sudo usermod -aG docker $(whoami)
sudo service docker start


运行docker


docker run -it --rm ubuntu:16.04 bash


查看镜像信息


cat /etc/os-release


列出已下载镜像
docker image ls


查看镜像、容器、数据卷所占用空间


docker system df 


查看虚悬镜像
docker image ls -f dangling=true


删除虚悬镜像
docker image prune


显示中间层镜像
docker image ls -a


列出指定镜像


docker image ls ubuntu


查看ubuntu:16.04后建立的镜像
docker image ls -f since=ubuntu:16.04


列出镜像id
docker image ls -q


列出镜像id和仓库名
docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"


删除镜像 
docker image rm id前几位即可
如果提示无法删除可以
docker image rm -f id前几位即可
另外一种删除方法
docker image rm 仓库名@digest 
查看正在运行docker
docker ps -a 


查看镜像摘要
docker iamge ls --digests


一个镜像可能对应多个标签,当删除时可能会出现untagged或者存在镜像对镜像的依赖,也是不会删除的


删除所有仓库名为redis的镜像
docker image rm $(docker image ls -q redis)
docker image rm $(docker image ls -q -f before=ubuntu:16.04)


docker run --name webserver -d -p 80:80 nginx


docker exec -it webserver bash
echo '<h1>this is Martin duan docker webserver!</h1>' > /usr/share/nginx/html/index.html


定制镜像(docker commit 会使镜像臃肿,每次修改并不会删除上层的东西,只是在当前层进行标记、添加、修改)
docker commit --author "Martin" --message "修改网页" webserver nginx:v2
重新部署
 docker run --name web2 -d -p 81:80 nginx:v2


Dockerfile定制镜像


sudo vim Dockerfile
添加下面内容:(FROM scratch 意味着不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在)
当有多个命令的时候使用&&连接,因为镜像有最大层数限制这样镜像只会有一层
FROM nginx 
RUN echo '<h1>this is Martin duan docker webserver!</h1>' > /usr/share/nginx/html/index.html


在Dockerfile目录下执行
docker build -t nginx:v3 . #(注意这个点)


镜像上下文
直接用Git repo进行构建
docker build url
用给定的tar压缩包构建
docker build http://server/context.tar.gz


从标准输入中构建
docker build - < Dockerfile 
或者
cat Dockerfile | docker build -


从标准输入中读取上下文压缩包进行构建


docker build - < context.tar.gz


Dockerfile 命令


COPY
COPY  <源路径> <目标路径>
ADD 
和COPY的格式和性质基本一致,但是增加了一些功能,源路径可以是url(并不常用)


CMD容器启动命令:
shell格式
exec格式
一般推荐使用exec,这类格式在解析时会被解析为json数组,因此要使用" ,不要用单引号。exec从stdin中exit后不会导致容器中断


service nginx start 
在容器中应该以前台形式进行
CMD ["nginx", "-g", "daemon off;"]


查看健康状态,端口映射情况
docker container ls 


参数详解:


docker run -t -i ubuntu:16.04 bash 


-t 让docker分配一个伪终端并绑定到容器的标准输入上,-i让容器的标准输入保持打开


当docker run 来创建容器时,Docker在后台运行的标准操作包括:
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启用一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去
从地址配置一个ip地址给容器
执行用户指定的用户程序
执行完毕后容器别终止


docker container start 可以将一个已经终止的容器启动进行


后台运行
docker run ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
会输入出到宿主机下
docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
不会输出
容器是否会长久运行时和docker run 指定的命令有关和-d参数无关


docker container logs [container ID or Names] 可以获取容器的输出信息
docker container stop 终止运行中的容器
docker container restart 重启运行态的容器


导出容器


docker export 命令
docker export container_id > ubuntu.tar 


docker container ls -a 
导入镜像
cat ubuntu.tar | docker import - test/ubuntu:v1.0


docker image ls
还可以通过url或者某个目录导入
docker import http:/example.com/example.tgz example/imagerepo


删除容器


docker container rm trusting_newton
删除运行中容器可以添加-f 
清理所有终止状态的容器
docker container prune 


docker run -d -p 5000:5000 ...





阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Martind/article/details/79966420
个人分类: linux
上一篇pyqt5
下一篇docker搭建tensorflow jupyter notebook环境
想对作者说点什么? 我来说一句

docker学习资料帅帅哒

2018年04月13日 85.18MB 下载

docker学习教程

2018年07月17日 113KB 下载

docker学习教程pdf

2018年07月17日 459KB 下载

没有更多推荐了,返回首页

关闭
关闭