Docker安装及基本命令

Stella981
• 阅读 852

###安装/启动Docker

####在CentOS 7上安装

Docker默认已经包含在CentOS-Extra仓库中,使用以下命令安装

sudo yum install docker

####在CentOS 6.5上安装

对于CentOS 6.5,Docker是 EPEL 仓库的一部分,因此需要确保已经加入EPEL的YUM源。在CentOS 6上,Docker的包名可能与桌面的docker应用冲突,因此,它的包名改为了docker-io

sudo yum -y remove docker
sudo yum install docker-io

####启动Docker

安装Docker之后,需要启动Docker守护进程

sudo service docker start

为了让docker能够开机运行,需要使用chkconfig: sudo chkconfig docker on

获取Docker镜像,启动Docker容器

sudo docker pull centos
sudo docker images centos
sudo docker run -i -t centos /bin/bash

###基本命令

下列命令创建一个容器简单的输出Hello world:

$ docker run ubuntu:14.04 /bin/echo 'Hello, world'
Hello, world

这里docker run命令指定了使用的镜像为ubuntu:14.04,我们的容器就是从该镜像运行。当指定一个镜像的时候,Docker首先会在你的宿主机上查找是否存在该镜像,如果不存在的话会从Docker Hub下载。

接下来指定了要在容器中运行的命令是/bin/echo 'Hello, world',当容器启动之后,Docker会创建一个新的ubuntu 14.04的环境,然后在里面执行这个命令。当命令执行完毕之后,Docker创建的这个容器的生命周期就结束了。

下面我们创建一个交互式的容器:

$ docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#

这次同样启动了ubuntu 14.04的镜像,但是这里指定了两个额外的参数-t-i。参数-t为刚才创建的容器分配一个伪终端(pseudo-tty),-i则允许我们通过获取容器的标准输入创建一个交互式的连接。

要退出该容器,在终端输入exit或者ctrl+D即可,这样该容器就可以停止了

root@2e3e7e77adbd:/# exit
exit

几个常用的docker命令:

  • docker ps 列出Container
  • docker logs 显示容器的标准输出
  • docker stop 停止运行中的容器
  • docker version 显示当前docker客户端和守护进程的版本信息

docker命令的子命令很多,

attach    附加到一个运行中的容器上去
build     从Dockerfile构建镜像
commit    从容器当前的修改创建一个新的镜像
cp        从容器的文件系统复制文件/文件夹到主机路径
create    创建一个新的容器
diff      检查容器文件系统发生的修改
events    从服务器获取实时的事件
exec      在已存在的容器中运行命令
export    将容器中的内容以流的方式导出为tar归档
history   显示镜像的历史
images    列出所有镜像
import    从tar包中的内容创建一个新的文件系统镜像
info      显示系统的信息
inspect   返回容器低级的信息
kill      杀掉一个运行中的容器
load      从tar归档载入镜像
login     注册或者登录到Docker注册服务器
logout    从Docker注册服务器登出
logs      检索容器中的日志
port      查询基于NAT到PRIVATE_PORT的公开端口
pause     暂停容器中所有的进程
ps        列出容器
pull      从Docker注册服务器拉取一个镜像或者仓库
push      推送一个镜像或者仓库到Docker注册服务器
restart   重启一个运行中的容器
rm        删除一个/多个容器
rmi       删除一个/多个镜像
run       在新的容器中运行命令
save      保存镜像到tar归档
search    从Docker Hub搜索一个镜像
start     启动一个已经停止的容器
stop      停止运行中的容器
tag       为仓库中的镜像添加标签
top       查询容器中运行的进程
unpause   取消容器的暂停状态
version   显示Docker的版本信息
wait      堵塞住直到容器停止,然后打印它的退出码

使用Dockerfile构建镜像:

docker build -t <your username>/<image name> .

运行镜像:

docker run -p <本地端口>:<容器端口> -d <镜像名称>
curl -i <本地IP>:<本地端口>

查看容器的日志(类似于tail -f命令)

docker logs -f <容器名称>

####例子:使用官方Nginx Docker镜像

使用之前,需要先获取官方nginx镜像

docker pull nginx

执行命令如下

docker run --name nginx_server -d -p 8080:80 -v /Users/mylxsw/codes/php:/usr/share/nginx/html:ro nginx

下面对提供的参数进行一一解释:

  • --name指定了我们创建的容器名称为nginx_server
  • -d指定了容器在后台运行
  • -p则指定了将容器的80端口映射到宿主机的8080端口
  • -v参数指定了将本地的/Users/mylxsw/codes/php目录映射到容器的/usr/share/nginx/html目录,并且访问权限为只读

启动该容器之后,就可以通过http://localhost:8080访问了。

更复杂一点,可以通过使用-v参数指定nginx配置文件-v /some/nginx.conf:/etc/nginx/nginx.conf:ro

在指定新的nginx配置文件时,注意一定要设置nginx的daemon off;配置项,如果以后台模式运行的话,容器就没法跟踪nginx的进程,容器启动后就会立即结束。

如果仅仅是测试的话,可以使用--rm选项,这样,在容器结束运行之后就可以自动删除,当然使用--rm选项的时候不能和-d选项同时使用。

docker run --rm --name nginx_server -d -p 8080:80 -v /Users/mylxsw/codes/php:/usr/share/nginx/html:ro nginx

参考:

Dockerizing Applications: A "Hello world"

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这