# 搜索镜像
docker search <image> # 在docker index中搜索image
# 下载镜像
docker pull <image> # 从docker registry server 中下拉image
# 查看镜像
docker images: # 列出images
# 删除镜像
docker rmi <image ID>: # 删除一个或多个image
# 使用镜像创建容器
docker run -i -t sauloal/ubuntu14.04
docker run -i -t sauloal/ubuntu14.04 /bin/bash # 创建一个容器,让其中运行bash 应用,退出后容器关闭
我们可以通过运行exit命令或者使用CTRL+D来退出容器。
# 查看容器
docker ps :列出当前所有正在运行的container
docker ps 默认显示运行的容器,
docker ps -a 显示所有容器:
# 再次启动容器
docker start/stop/restart <container> #:开启/停止/重启container
docker start [container_id] #:再次运行某个container (包括历史container)
docker attach [container_id] #:连接一个正在运行的container实例(即实例须
为start状态,可以多个窗口同时attach 一个container实例)
docker start -i <container> #:启动一个container并进入交互模式(相当于先
start,在attach)
docker run -i -t <image> /bin/bash #:使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
#注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。
# 删除容器
docker rm <container...> #:删除一个或多个container
docker rm `docker ps -a -q` #:删除所有的container
docker ps -a -q | xargs docker rm #:同上, 删除所有的container
在容器内使用docker logs命令,查看容器内的标准输出
docker logs [container_id]
docker images 查看镜像
docker ps 查看容器
docker ps -a 查看所有容器,包括没有运行的
docker rm 删除容器
docker rmi 删除镜像
docker build 新建镜像
docker run 运行容器
docker stop 停止容器
docker logs 查看日志
docker load 导入镜像
docker save 导出镜像
docker commit 容器生成镜像
刚开始接触Docker的朋友,可能会遇到这么一个问题,使用centos7镜像创建容器后,在里面使用systemctl启动服务报错。针对这个报错,我们接下来就分析下!
# docker run -itd --name centos7 centos:7
# docker attach centos7
# yum install vsftpd
# systemctl start vsftpd
Failed to get D-Bus connection: Operation not permitted
不能启动服务,什么情况?
难道容器不能运行服务嘛!!!
答:
Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。
再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!
因此,请遵守容器设计原则,一个容器里运行一个前台服务!
我就想这样运行,难道解决不了吗?
答:可以,以特权模式运行容器。
创建容器:
# docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
进入容器:
# docker exec -it centos7 /bin/bash
这样可以使用systemctl启动服务了
想要后台启动容器进行调试
方案一 docker run -d <image_name> tail -f /dev/null
方案二 docker run -i -t <image_name> [command]
然后Ctrl+P+Q即可退出控制台,但是容器没有退出,
可使用命令查看: docker ps
example: docker run -i -t centos /bin/bash
docker容器导入导出有两种方法
1.使用save和load
docker save imageID > filename
docker load < filename
2.使用export和import
docker export containID > filename
docker import filename [newname]
运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。
不过,你使用docker commit 命令可以把一个正在运行的容器变成一个新的镜像。
docker commit <container> [repo:tag]