Docker

# 搜索镜像
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]

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值