Docker快速入门指南

镜像操作

搜索镜像
$ docker search centos
下载镜像
$ docker pll centos
导入镜像
$ docker load < ./docker/image/centos.tar.gz
导出镜像
$ docker save centos > /tmp/centos.tar.gz
删除镜像
如果这个镜像创建了容器不会被删除

$ docker rmi centos
查看当前拥有的镜像
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              a8493f5f50ff        2 weeks ago         192MB
nginx               latest              5766334bdaa0        2 weeks ago         183MB
选项    描述
REPOSITORY    所属仓库
TAG    标签
IMAGE ID    进项ID
CREATED    创建时间
SIZE    镜像创建时间
删除所有的镜像
$ docker rmi $(docker images -q)

容器操作

启动一个新容器
$ docker run -i -t centos /bin/bash
启动一个已经存在的容器
$ docker start 4253385a9655
启动一个容器退出时不关闭
$ docker run --name mydocker -t -i centos /bin/bash
[[email protected] /]# ps -aux|grep -v "ps -aux" # 可以看到只启动了一个/bin/bash进程
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  11776  3084 ?        Ss   05:49   0:00 /bin/bash
参数    描述
–name    镜像的名字
-t    分配一个伪终端
-i    容器标准输入保持打开状态
通过容器的ID我们可以发现和容器里面的主机名是一致的

$ docker ps -a | grep "5324897fb034"
5324897fb034        centos              "/bin/bash"              6 minutes ago       Up 6 minutes                                    mydocker
启动一个容器在退出的时候自动删除这个容器
$ docker run --rm -it centos /bin/bash
进入一个已经运行的容器
# 这种方式启动,如果退出容器,则这个容器就会被退出,如果其他人登陆这个容器,则操作是同步的
$ docker attach 5324897fb034
通过nsenter访问容器且推出时不销毁容器

# 获取容器的PID
$ docker inspect --format "{{.State.Pid}}" 5324897fb034
15434
# 指定PID进入容器
$ nsenter -t 15434 -u -i -n -p
nsenter访问的是一个进程的命名空间

查看所有的容器
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4253385a9655        centos              "/bin/bash"         6 minutes ago       Up 4 minutes                            thirsty_visvesvaraya
选项    描述
CONTAINER ID    容器的ID
IMAGE    通过哪个镜像来运行的
COMMAND    最后执行的命令
CREATED    创建时间
STATUS    状态
PORTS    启动的端口
NAMES    容器的名称,名称默认是自动生成的
删除一个容器
$ docker rm 307f7b240273
删除一个正在运行的容器
$ docker rm -f 9dc6a6940ce1
停止所有正在运行的容器
docker kill $(sudo docker ps -a -q)
删除所有容器
$ docker kill $(docker ps -a -q)
删除状态为退出的所有容器
$ docker rm $(docker ps -a -f status=exited -qa)
启动一个新容器
$ docker run -i -t centos /bin/bash
启动一个已经存在的容器
$ docker start 4253385a9655
启动一个容器退出时不关闭
$ docker run --name mydocker -t -i centos /bin/bash
[[email protected] /]# ps -aux|grep -v "ps -aux" # 可以看到只启动了一个/bin/bash进程
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  11776  3084 ?        Ss   05:49   0:00 /bin/bash
参数    描述
–name    镜像的名字
-t    分配一个伪终端
-i    容器标准输入保持打开状态
通过容器的ID我们可以发现和容器里面的主机名是一致的

$ docker ps -a | grep "5324897fb034"
5324897fb034        centos              "/bin/bash"              6 minutes ago       Up 6 minutes                                    mydocker
启动一个容器在退出的时候自动删除这个容器
$ docker run --rm -it centos /bin/bash
进入一个已经运行的容器
# 这种方式启动,如果退出容器,则这个容器就会被退出,如果其他人登陆这个容器,则操作是同步的
$ docker attach 5324897fb034
通过nsenter访问容器且推出时不销毁容器

# 获取容器的PID
$ docker inspect --format "{{.State.Pid}}" 5324897fb034
15434
# 指定PID进入容器
$ nsenter -t 15434 -u -i -n -p
nsenter访问的是一个进程的命名空间

查看所有的容器
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4253385a9655        centos              "/bin/bash"         6 minutes ago       Up 4 minutes                            thirsty_visvesvaraya
选项    描述
CONTAINER ID    容器的ID
IMAGE    通过哪个镜像来运行的
COMMAND    最后执行的命令
CREATED    创建时间
STATUS    状态
PORTS    启动的端口
NAMES    容器的名称,名称默认是自动生成的
删除一个容器
$ docker rm 307f7b240273
删除一个正在运行的容器
$ docker rm -f 9dc6a6940ce1
停止所有正在运行的容器
docker kill $(sudo docker ps -a -q)
删除所有容器
$ docker kill $(docker ps -a -q)
删除状态为退出的所有容器
$ docker rm $(docker ps -a -f status=exited -qa)

网络

随机端口映射
# 启动容器
$ docker run -d -P nginx
# 查看Nginx访问日志
$ docker logs c506ed2a4e65
指定端口映射
$ sudo docker run -d -p 81:80 nginx

存储

数据卷
指令    描述
-v /data    自动生成目标目录
-v src :dst :rw    指定目录挂载,并指定挂载目录的权限
$ docker run -i -t --name volume-test1 -v /data centos /bin/bash
# ls /data
# 查看挂载的目录
$ docker inspect 80cef0fbd4f1
指定目录挂载

$ sudo docker run -i -t -v /opt:/opt centos
# df -h | grep "/opt"
/dev/sda2       457G   62G  373G  15% /opt
数据卷容器
一个容器访问另一个容器的数据卷

$ docker run --name nfs -it -d -v /data centos
参数    描述
-d    让容器在后台运行
启动其他的容器,使用nfs容器里面的卷

$ docker run -it --name test1 --volumes-from nfs centos

构建Docker镜像

手动构建
$ docker run -i -t --name webserver centos
# cd /etc/yum.repos.d/
# rpm -ivh https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/Packages/wget-1.14-13.el7.x86_64.rpm
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum -y install nginx
# vi /etc/nginx/nginx.conf
daemon off;
# exit
$ docker commit -m "webserver" a6e5ab54bf16 ansheng/webserver:v1
$ docker images | grep "webserver"
webserver           v1                  bd32c3d82378        39 seconds ago      363MB
$ docker run -d -p 80:80 webserver:v1 nginx
$ curl -I 127.0.0.1:82
HTTP/1.1 200 OK
通过DockerFile构建
$ cd /tmp/
$ mkdir webserver
$ cd webserver/
$ echo "Hello, World!" > index.html
$ vim Dockerfile
# This docker file
# VERSION
# Author: An Sheng
# Base image
FROM centos

#Maintainer
MAINTAINER ansheng [email protected]

# Commands
RUN rpm -ivh https://mirrors.aliyun.com/centos/7.3.1611/os/x86_64/Packages/wget-1.14-13.el7.x86_64.rpm
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum install nginx -y
ADD index.html /usr/share/nginx/html/index.html
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]
$ docker build -t webserver:v2 ./
运行容器

$ docker run -d -p 80:80 webserver:v2
$ curl -I 127.0.0.1:80
HTTP/1.1 200 OK
Dockerfile描述
指令    描述
FROM    指定基础镜像
MAINTAINER    维护者信息
RUN    执行的命令
ADD    把本地文件copy到镜像中
WORKDIR    指定工作目录
VOLUME    目录挂载
EXPOSE    启动的端口
CMD    最后执行的指令

其他操作

时区问题
[[email protected] ~]# date
Sat Apr 29 08:51:51 UTC 2017
[[email protected] ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
[[email protected] ~]# date
Sat Apr 29 16:52:28 CST 2017
字符集问题
LANG=en_US.UTF-8
普通用户使用docker
sudo gpasswd -a ${USER} docker

原文地址:https://www.cnblogs.com/hujianli/p/9388859.html

时间: 2024-07-31 00:26:16

Docker快速入门指南的相关文章

JWPlayer快速入门指南(中文)

将JW Player嵌入到网页中非常的简单,只需要进行如下3个步骤: 1.解压mediaplayer-viral.zip文件,将jwplayer.js和player.swf文件拷贝到工程中: 2.在页面引入jwplayer.js文件: <script type="text/javascript" src="/jwplayer/jwplayer.js"></script> 3.将下面代码粘贴在body标签内,如下所示: <div id=&

Chapter 0.SymmetricDS快速入门指南( Quick Start Guide)

本文档是SymmetricDS3.6.14文档的第一章节Quick Start Guide文档的翻译,的目的是帮助读者快速搭建一个SymmetricDS集群并普及一些基本概念术语. 本文档描述了如何在两个SymmetricDS节点之间同步两个相同schema的数据库.下面的例子构建了一个分销业务模型,有一个中央数据库(我们叫它root或者corp节点)和多个零售商店的数据库(我们叫它client或者store节点).对于本教程,我们将只有一个store(商店)节点,如下图.如果你愿意,可以再教程

AngularJS快速入门指南20:快速参考

thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table.reference>thead>tr>td, table.reference>tbody>tr>td, table.reference>tfoot>tr>td { padding: 8px; line-height: 1.42857143; vertic

AngularJS快速入门指南05:控制器

AngularJS控制器用来控制AngularJS applications的数据. AngularJS控制器就是普通的JavaScript对象. AngularJS控制器 AngularJS applications通过控制器进行控制. ng-controller指令定义了一个application的控制器. 一个控制器就是一个JavaScript对象,它可以通过标准的JavaScript对象构造函数来创建. <div ng-app="myApp" ng-controller=

[转] Clojure 快速入门指南:1/3

[From] http://huangz.iteye.com/blog/1325228 导读 本文的目标是为熟悉 Ruby.Python或者其他类似语言.并对 Lisp 或者函数式编程有一定程度了解的程序员写的 Clojure 快速入门指南. 为了让文章尽可能地精炼且简单易懂,本文有以下三个特点: 一:不对读者的知识水平作任何假设,当遇上重要的知识点时,只给出 wikipedia 等网站的链接引用而不对知识点进行解释,有需要的读者可以沿着链接查看,没需要的直接略过就行了. 二:和第一条类似,没有

Docker快速入门实践-纯干货文章

Docker快速入门实践-纯干货文章,如果细看还能发现讲解视频呦!小伙伴们赶紧猛戳吧! Docker快速入门实践-纯干货文章 老男孩教育2016启用最新的官方博文地址: http://blog.oldboyedu.com/ 欢迎小伙伴们收藏关注,干货连连!

AngularJS快速入门指南15:API

thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table.reference>thead>tr>td, table.reference>tbody>tr>td, table.reference>tfoot>tr>td { padding: 8px; line-height: 1.42857143; vertic

AngularJS快速入门指南14:数据验证

thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table.reference>thead>tr>td, table.reference>tbody>tr>td, table.reference>tfoot>tr>td { padding: 8px; line-height: 1.42857143; vertic

AngularJS快速入门指南17:Includes

使用AngularJS,你可以在HTML中包含其它的HTML文件. 在HTML中包含其它HTML文件? 当前的HTML文档还不支持该功能.不过W3C建议在后续的HTML版本中增加HTML imports功能,以支持在HTML中包含其它的HTML文件. <link rel="import" href="/path/navigation.html"> 在服务端包含文件 大部分的web服务器都支持服务端包含文件(Server Side Includes).通过