目录
Docker 常用命令
查看版本 docker version
启动 Docker 进程
sudo systemctl start docker
关闭进程
sudo systemctl stop docker
删除 Docker CE
sudo yum remove docker-ce
sudo rm -rf /var/lib/docker
运行交互式的容器
docker run -i -t ubuntu:15.10 /bin/bash -t:在新容器内指定一个伪终端或终端。 -i:允许你对容器内的标准输入 (STDIN) 进行交互
我们可以通过运行exit命令或者使用CTRL+D来退出容器
启动容器(后台模式)
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker ps
在容器内使用docker logs命令,查看容器内的标准输出
docker logs 2b1b7a428627
docker logs amazing_cori
停止容器
docker stop amazing_cori
docker stop 2b1b7a428627
重启容器
docker start amazing_cori
docker start 2b1b7a428627
删除容器
docker rm determined_swanson
删除时,容器必须是停止状态,否则会报错
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序
进入容器
docker run -d --name ubuntu ubuntu:15.10 /bin/sh
docker run -d --name nginx -p 80:80 --volumes-from=ubuntu nginx
docker run -d --name tomcat -p 8080:8080 --volumes-from=ubuntu tomcat
docker run -d --name nginx -p 80:80 -v /www:/var/www nginx
docker exec -i -t nginx /bin/bash
删除镜像
docker rmi determined_swanson
Docker在容器中管理数据主要有两种方式:
数据卷(Data Volumes):容器内数据直接映射到宿主机
docker run -d --name nginx -p 80:80 -v /www:/var/www nginx
把宿主机的/www映射到docker 容器的/var/www nginx目录
数据卷容器(Data Volume Containers):使用特定容器来管理数据
如果要在多个容器之间共享数据,最简便的方式就是使用数据卷容易,数据卷容器就是使用一个特定容器来做数据卷,多个其他容器可以同时挂载这个数据卷,从而达到共享数据的目的。
创建数据卷容器也是使用 docker run 跟 -v 参数,这里以 ubuntu:latest 镜像创建的容器作为数据卷容器:
docker run -it -v /data --name ubuntu ubuntu /bin/bash
作为数据卷容器的容器不需要是运行状态,docker run 跟 --volumes-from 参数可以指定某个容器作为数据卷
docker run -d --name nginx -p 80:80 --volumes-from=ubuntu nginx
docker run -d --name tomcat -p 8080:8080 --volumes-from=ubuntu tomcat
安装mysql数据库
docker search mysql
docker pull mysql:5.7
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
稍等,需要一会儿初始化。
进入docker容器
docker exec -it mysql /bin/bash
docker stop mysql
docker rm mysql
查询所有docker容器(包含未运行的):
docker ps -a
获取容器/镜像的元数据
docker inspect mysql
Docker 客户端
docker
查看 docker stats 指令的具体使用方法
docker stats --help
载入镜像
docker pull training/webapp
docker run -d -P training/webapp python app.py -d:让容器在后台运行 -P:将容器内部使用的网络端口映射到我们使用的主机上
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上
docker run -d -p 5000:5000 training/webapp python app.py 容器内部的 5000 端口映射到我们本地主机的 5000 端口上
查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号
docker port 7a38a1ad55c6
docker port determined_swanson
查看docker容器的详细信息
docker inspect determined_swanson
查找镜像
docker search httpd
创建镜像
1.从已经创建的容器中更新镜像,并且提交这个镜像
例如 docker run -t -i ubuntu:15.10 /bin/bash
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit命令来退出这个容器
此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本
docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
-m:提交的描述信息
-a:指定镜像作者
e218edb10161:容器ID
runoob/ubuntu:v2:指定要创建的目标镜像名
使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2
使用我们的新镜像 runoob/ubuntu 来启动一个容器
docker run -t -i runoob/ubuntu:v2 /bin/bash
构建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像
[root@localhost ~]# cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' |chpasswd RUN useradd runoob RUN /bin/echo 'runoob:123456' |chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
[root@localhost ~]# docker build -t runoob/centos:6.7 .
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
设置镜像标签
docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID 可以为镜像多一个标签
容器命名
docker run -d --name tomcat -p 8080:8080 tomcat
docker run -d --name nginx -p 80:80 nginx
docker和服务端守护进程通信有两种方式一个就是docker自己的client(docker cli)还有一个就是用户可以自己写程序,调用docker的remote-api来和docker的守护进程通信。还有要知道的是docker客户端和服务端是使用socket连接方式的,有三种socket连接方式,一种是直接连接本地的socket文件unix:///var/run/docker/sock,第二种是tcp://host:prot,第三种是fd://socketfd,默认docker都是直接连接本地的socket文件,而且还支持fd://socketfd,如果我们要支持远程连接就必须要加上tcp连接方式
使用docker本地客户端连接远程docker服务端
创建/etc/docker/daemon.json,默认docker不创建这个文件,配置如下:
{
"registry-mirrors": ["https://kf0vxqi6.mirror.aliyuncs.com"],
"labels": ["name=docker-server"],
"hosts": [
"tcp://0.0.0.0:2376",
"unix:///var/run/docker.sock"
]
}
第一行是仓库地址,第二行是给docker-daemon做一个标签,第三行hosts就是连接方式,现在docker同时支持两种连接方式了
接着我们直接在客户端centos机器上连接服务端的机器,输入下面命令
docker -H tcp://192.168.0.83:2376 info
-H后面就是指定连接的服务端地址 info表示查看服务端daemon的信息
一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。
Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用,docker images
docker run ubuntu:15.10
它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。
当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。
我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。
CentOS Docker 安装
Docker支持以下的CentOS版本:
- CentOS 7 (64-bit)
- CentOS 6.5 (64-bit) 或更高的版本
使用脚本安装 Docker
1、使用 sudo 或 root 权限登录 Centos。
2、确保 yum 包更新到最新。
$ sudo yum update
3、执行 Docker 安装脚本。
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
执行这个脚本会添加 docker.repo 源并安装 Docker。
4、启动 Docker 进程。
sudo systemctl start docker
5、验证 docker 是否安装成功并在容器中执行一个测试的镜像。
$ sudo docker run hello-world docker ps
到此,Docker 在 CentOS 系统的安装完成。
镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。
新版的 Docker 使用 /etc/docker/daemon.json(Linux) 或者 %programdata%\docker\config\daemon.json(Windows) 来配置 Daemon。
请在该配置文件中加入(没有该文件的话,请先建一个):
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }