安装启动docker
安装docker
yum install docker
启动docker
service docker start
查看docker状态
service docker status
配置国内镜像源
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
重启docker生效
使用镜像
以redis为例
搜索镜像
docker search redis
获取镜像
## 拉取redis的1atest版本
docker pull redis:latest
列出本地镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/redis latest 1ca2c2a1b554 4 days ago 117 MB
在列出信息中,可以看到几个字段信息
- REPOSITORY :来自于哪个仓库,比如 ubuntu
- TAG:镜像的标记,比如 14.04
- IMAGE ID:它的
ID
号(唯一) - CREATED:创建时间
- VIRTUAL SIZE:镜像大小
运行镜像
docker run -idt --name redis -p 6379:6379 -v /usr/local/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data --privileged=true docker.io/redis redis-server /etc/redis/redis.conf
# -i(interactive):即时未连接,也要打开STDIN
# -d(detach):后台运行,打印出容器ID
# -t(tty):分配一个伪TTY
# -p(publish list):容器的端口发布到本机的端口,数组配置
# --restart:应用退出是重启启动策略(默认是no)
# -v(volume):挂载本地目录到容器上,数组配置
# --name:给容器指定一个名字
# --privileged:授予此容器扩展权限(即让容器中的root拥有主机root的权限),对于挂载的目录这个参数很有用。
#############以上是常用的启动参数,以下是部分指令
# --rm:当容器退出时自动删除
查看容器启动日志
docker logs redis
停止容器
docker stop redis
查看容器
docker ps -a
# -a 显示所有,包括不在运行的容器
删除容器
docker rm redis
启动容器
docker start redis
进入容器
docker exec -it redis /bin/bash
root@72cdf240c63e:/data#
创建镜像
其余相关指令参考:docker文档
利用 Dockerfile 来创建镜像
- 新建一个目录和一个 Dockerfile
$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile
- Dockerfile 中每一条指令都创建镜像的一层,例如:
# This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
Dockerfile 基本的语法是
- 使用
#
来注释 -
FROM
指令告诉 Docker 使用哪个镜像作为基础 - 接着是维护者的信息
-
RUN
开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件
- 编写完成 Dockerfile 后可以使用
docker build
来生成镜像。
$ sudo docker build -t="ouruser/sinatra:v2" .
Uploading context 2.56 kB
Uploading context
Step 0 : FROM ubuntu:14.04
……………………
Removing intermediate container 5e9d0065c1f7
Successfully built 324104cde6ad
其中 -t
标记来添加 tag,指定新的镜像的用户信息。 “.” 是 Dockerfile 所在的路径(当前目录),也可以替换为一个具体的 Dockerfile 的路径。
可以看到 build 进程在执行操作。它要做的第一件事情就是上传这个 Dockerfile 内容,因为所有的操作都要依据 Dockerfile 来进行。 然后,Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit
一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。
注意一个镜像不能超过 127 层
此外,还可以利用 ADD
命令复制本地文件到镜像;用 EXPOSE
命令来向外部开放端口;用 CMD
命令来描述容器启动后运行的程序等。例如:
# put my local web site in myApp folder to /var/www
ADD myApp /var/www
# expose httpd port
EXPOSE 80
# the command to run
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
还可以用
docker tag
命令来修改镜像的标签。
存出和载入镜像
存出镜像
如果要导出镜像到本地文件,可以使用 docker save
命令。
$sudo docker save -o ubuntu_14.04.tar ubuntu:14.04
载入镜像
可以使用 docker load
从导出的本地文件中再导入到本地镜像库,例如
$ sudo docker load --input ubuntu_14.04.tar
或
$ sudo docker load < ubuntu_14.04.tar
Docker异常记录
Failed to start Docker Application Container Engine.
1.启动docker失败,错误信息:could not change group /var/run/docker.sock to docker: group docker not found
解决方案:
vi /etc/sysconfig/docker