Docker入门及常用命令
2016-11-02 14:37
651 查看
官方文档:http://docs.master.dockerproject.org/engine/installation/linux/ubuntulinux/ 1.安装Docker 1.准备工作: 1.检查Linux内核,版本必须在3.8以上 $ uname -r 4.4.0-31-generic 2.更新apt,并安装支持https的证书 $ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificates 注意: 1.遇到如下异常: E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 解决: ps -aux|grep apt kill掉占用apt-get的进程 3.添加一个新的 GPG key sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 4.创建 /etc/apt/sources.list.d/docker.list文件,清空里面内容,并添加以下内容: deb https://apt.dockerproject.org/repo ubuntu-xenial main 5.更新 apt-get 的索引 sudo apt-get update 6.清除旧的分支(如果之前存在) sudo apt-get purge lxc-docker 7.设置APT支持docker更新 apt-cache policy docker-engine 2.安装Docker 1.管理员身份登录 sudo su 2.更新APT包的索引 apt-get update 3.安装Docker sudo apt-get install docker-engine 4.开启Docker后台进程 sudo service docker start 5.验证Docker是否正确安装 sudo docker run hello-world 2.Docker基础 1.概念 镜像:类似虚拟机快照,但非常轻量,镜像有唯一ID 及一个供人阅读的名字和标签对,eg:ubuntu:latest,django:1.7 创建Docker镜像有几种方式:多数是在现有镜像基础上创建新镜像,几乎所有需要的东西都有公共镜像 创建镜像:可以拿一个镜像,对它进行修改来创建它的子镜像 2种方式: 1.在一个文件种指定一个基础镜像及需要完成的修改 2.通过"运行"一个镜像,对其进行修改并提交 容器:可以从镜像中创建容器,等同于从快照种创建虚拟机,与虚拟机一样,容器是隔离的,拥有一个唯一ID和名字,Docker允许公开容器的特定端口,以提供对外服务 推荐一个容器一个进程的方式,容器是设计来运行一个应用的 3.Docker常用命令 1.docker pull ubuntu:latest 从公共registry下载镜像 2.docker images 列出镜像 3.docker run --rm -ti buntu /bin/bash 从指定镜像上创建一个容器 参数: --rm 告诉Docker一旦运行的进程退出就删除容器 --ti 告诉Docker分配一个伪终端并进入交互模式,这将进入到容器内,对于快速原型开发或尝试很有用,但不要在生产容器中打开这些标志 --ubuntu 容器所在的镜像 --/bin/bash 要运行的命令,因为我们以交互模式启动,它将显示一个容器的提示符 4.常用命令: 1.查看docker信息(version、info) docker version #docker 版本 docker info #docker 系统信息 2.对镜像image操作(search、pull、images、rmi、history) docker search image_name #检索image docker pull image_name #下载image docker images -a #列出所有image docker rmi image_name #删除一或多个镜像 -f:强制删除 docker history image_name #显示一个镜像的历史 3.启动容器(run) #在容器中运行 echo 命令,输出 hello world docker run image_name echo "hello world" #交互式进入容器中 docker run -i -t image_name /bin/bash #在容器中安装新程序 docker run image_name apt-get install y app_name 4.查看容器(ps) # 列出当前所有正在运行的container $docker ps # 列出所有的container $docker ps -a # 列出最近一次启动的container $docker ps -l 5.保存对容器修改(commit) # 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message $docker commit ID new_image_name 分析: image相当于类,Container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image 4.配置Docker拉取加速 daoCloud注册 1.查看我的加速地址:https://www.daocloud.io/mirror 得到加速地址: http://d1ece5f6.m.daocloud.io 2.配置 /etc/default/docker,在DOCKER_OPTS=中添加: https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxx.m.daocloud.io 说明: 这里xxx表示我的加速地址 完整配置: 1.编辑docker配置 # vi /etc/default/docker 最后一行添加: DOCKER_OPTS="--registry-mirror=https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d1ece5f6.m.daocloud.io" 2.重启docker服务 # service docker restart 5.制作Docker镜像 2种方式 1.使用docker commit 命令创建镜像 1.通过docker run命令启动容器 2.修改docker镜像内容 3.docker commit提交修改的镜像 4.docker run新的镜像 2.使用Dockerfile创建镜像 1.使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。 我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile, 包含一些如何创建镜像的指令 2.Dockerfile语法: #用来注释 FROM指令告诉Docker使用哪个镜像作为基础, FROM <images>:<tag> 接着是维护者信息,MAINTAINER <name> RUN开头的指令会在创建中运行,eg:安装一个软件包,这里使用 apt-get 来安装了一些软件 2种格式: RUN <command> (the command is run in a shell - `/bin/sh -c`) RUN ["executable", "param1", "param2" ... ] (exec form) eg: 1.新建一个目录和一个Dockerfile # mkdir new_folder # cd new_folder # touch Dockerfile 2.编辑Dockerfile #这里是注释 #设置继承自哪个镜像 FROM ubuntu:14.04 #下面是一些创建者基本信息 MAINTAINER JayHe (jayhe@qq.com) #在终端需要执行的命令 RUN apt-get update RUN apt-get install -y openssh-server RUN mkdir -p /var/run/sshd 3.使用docker build生成镜像 docker build -t="jayhe/ubuntu:v1" . 参数分析: -t 用来添加 tag,指定新的镜像的用户和镜像名称信息 . 是Dockerfile所在路径(. 表示当前目录),可替换为一个具体的Dockerfile路径 4.以交互方式运行docker docker run -it jayhe/ubuntu:v1 /bin/bash 5.运行docker时指定配置 sudo docker run -d -p 172.17.65.185:9999:22 ubuntu:tools '/usr/sbin/sshd' -D 参数分析: -i:表示以“交互模式”运行容器,-i 则让容器的标准输入保持打开 -t:表示容器启动后会进入其命令行,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上 -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>, -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷。 -p:指定对外80端口 # 不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”-
Docker常用命令
1. 查看docker信息(version、info)
[plain] viewplain copy
# 查看docker版本
$docker version
# 显示docker系统的信息
$docker info
2. 对image的操作(search、pull、images、rmi、history)
[plain] viewplain copy
# 检索image
$docker search image_name
# 下载image
$docker pull image_name
# 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
$docker images
# 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents
$docker rmi image_name
# 显示一个镜像的历史; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs
$docker history image_name
3. 启动容器(run)
Docker容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell环境等等。但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。
[plain] view
plain copy
# 在容器中运行"echo"命令,输出"hello word"
$docker run image_name echo "hello word"
# 交互式进入容器中
$docker run -i -t image_name /bin/bash
# 在容器中安装新的程序
$docker run image_name apt-get install -y app_name
Note: 在执行apt-get 命令的时候,要带上-y参数。如果不指定-y参数的话,apt-get命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。apt-get 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失。
4. 查看容器(ps)
[plain] viewplain copy
# 列出当前所有正在运行的container
$docker ps
# 列出所有的container
$docker ps -a
# 列出最近一次启动的container
$docker ps -l
5. 保存对容器的修改(commit)
当你对某一个容器做了修改之后(通过在容器中运行某一个命令),可以把对容器的修改保存下来,这样下次可以从保存后的最新状态运行该容器。[plain] view
plain copy
# 保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message
$docker commit ID new_image_name
Note: image相当于类,Container相当于实例,不过可以动态给实例安装新软件,然后把这个container用commit命令固化成一个image。
6. 对容器的操作(rm、stop、start、kill、logs、diff、top、cp、restart、attach)
[plain] viewplain copy
# 删除所有容器
$docker rm `docker ps -a -q`
# 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container
$docker rm Name/ID
# 停止、启动、杀死一个容器
$docker stop Name/ID
$docker start Name/ID
$docker kill Name/ID
# 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
$docker logs Name/ID
# 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
$docker diff Name/ID
# 显示一个运行的容器里面的进程信息
$docker top Name/ID
# 从容器里面拷贝文件/目录到本地一个路径
$docker cp Name:/container_path to_path
$docker cp ID:/container_path to_path
# 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10
$docker restart Name/ID
# 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process
$docker attach ID
Note: attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。
7. 保存和加载镜像(save、load)
当需要把一台机器上的镜像迁移到另一台机器的时候,需要保存镜像与加载镜像。[plain] view
plain copy
# 保存镜像到一个tar包; -o, --output="" Write to an file
$docker save image_name -o file_path
# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file
$docker load -i file_path
# 机器a
$docker save image_name > /home/save.tar
# 使用scp将save.tar拷到机器b上,然后:
$docker load < /home/save.tar
8、 登录registry server(login)
[plain] viewplain copy
# 登陆registry server; -e, --email="" Email; -p, --password="" Password; -u, --username="" Username
$docker login
9. 发布image(push)
[plain] viewplain copy
# 发布docker镜像
$docker push new_image_name
10. 根据Dockerfile 构建出一个容器
[plain] viewplain copy
#build
--no-cache=false Do not use cache when building the image
-q, --quiet=false Suppress the verbose output generated by the containers
--rm=true Remove intermediate containers after a successful build
-t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success
$docker build -t image_name Dockerfile_path
相关文章推荐
- Docker入门实战(一)——Docker常用命令
- Docker入门之 - Docker常用命令
- Docker 入门学习笔记二:常用命令
- Docker入门实战(一)——Docker常用命令
- Docker入门学习(3)----Docker架构与常用命令总结
- Docker入门实践(六) 常用操作命令示例汇总
- Docker入门之常用命令
- Docker新手入门之九:Docker常用命令总结
- Linux 入门常用命令 — 文件的复制、删除和移动
- LINUX入门常用命令之进入与退出
- LINUX入门常用命令之目录的创建与删除
- Linux 入门常用命令 — 备份与压缩
- LINUX入门常用命令之文件内容查看
- LINUX入门常用命令之磁盘管理
- Linux 入门常用命令 — 修改密码,改变用户
- Linux 入门常用命令 — 目录的创建与删除
- Linux 入门常用命令 — 文本处理
- 存储入门:volume manager常用命令速查
- Linux 入门常用命令
- LINUX入门常用命令之在Linux环境下运行DOS命令