docker安装
查看是否运行docker进程
0,service docker.io status
1,apt-get install -y docker.io
2,service docker.io status
发现服务已经开始运行。
3,docker -v 检查已经安装的docker的版本,想看更详细的信息,请执行docker version
4,docker info 来查看服务器上docker相关的基本信息包括容器和镜像等。
在centos中安装docker
1,yum install -y docker
2,systemctl status docker.service 查看已经安装的docker的状态
3,systemctl start docker.service 启动docker 服务 active状态为active(running)
4,查看已经按照docker信息,docker -v/version/info
docker升级
0,首先备份你的容器和镜像如果有的话,
1,wget -qO- https://get.docker.com/gpg | apt-key add -
2,echo deb http://get.docker.com/ubuntu docker main> /etc/apt/sources.list.d/docker.list
3, apt-get update
4, apt -get install lxc-docker
docker 运行
0,ls -l /run 查看docker.sock
1,查看所有分组 cat /etc/group 找到docker所在的分组
2,docker run -it ubuntu /bin/bash 允许一个ubuntu并打开终端 需要root
权限才可以运行,或者授予docker组的权限
3,sudo gpasswd -a user-name docker 再次查看分组,cat /etc/group 可以看到
docker:x:数字:user-name
4, 重启登录然后执行docker run -it ubuntu /bin/bash
docker 配置
0,netstat -tlp 查看是否有端口被docker占用
1,service docker stop 停止docker服务
2,启动docker已daemon服务启动并指定端口:docker -H 192.168.56.50:2375 -d &
3,执行命令后再次通过netstat -tlp 查看对应的Local Address可以看到启动到docker
4,在另外的机器中,通过命令export DOCKER_HOST="tcp://192.168.56.50:2375"
将docker 的服务指定到上述配置的服务中,通过命令docker version/info查看是否为我们启动到服务器相关的信息。
5,如果想恢复到本地的docker服务,则可以执行命令export DOCKER_HOST=
执行后可以通过docker version/info 查看对应的docker服务相关的信息。
备注将docker server 以deamon运行到指定主机和端口后,任何人都可以连接,而不再
仅仅限定为root用户或者docker组的用户可以,所以小心使用
6,通过 2个 -H 命令可以将docker服务即运行在网络端,又运行在本地。
docker -H 192.168.56.50:2375 -H unix:///var/run/docker.sock -d &
docker 命令
0,docker ps -a
查看已经运行过的所有的容器
1,docker ps
查看正在运行的docker 容器
2,docker start dockeriD
启动指定id的容器
3,docker attach dockeriD
连接到指定的容器中
4,查看系统中容器的文件ls -l /var/lib/docker/aufs/diff/
5,查看指定容器中的文件ls -l /var/lib/docker/aufs/diff/完整的容器文件id
6,查看指定目录中的文件ls -l /var/lib/docker/aufs/diff/完整的容器文件id/temp
docker 组成
docker 的主要成分。
Docker Engine(可以理解为码头,为了更好的发布应用而生)
主要提供的东西是应用基础架构和运行时的依赖。
如:根文件系统,网络栈,进程继承数,可变量,权限控制和资源配置等。
Images镜像(可以理解为货单,对应我们可以理解为容器停止状态的资源和合集)
下载镜像到本地:
docker pull imagename 下载最新版本镜像导本地
docker pull -a imagename 下载指定仓库中所有版本镜像到本地。
docker run -it imagename 就会变成容器。
docker images imagename 查看本地已经下载的全量imagename镜像。image
6id 唯一确定不同的image.
docker images 查看全量的images
/var/lib/docker/
Containers
运行中的image是容器。
docker run -it imagename /bin/bash 运行容器并且打开可交互的终端。
docker ps 查看运行中的docker
docker attach containerID 登录到容器中。
docker ps -a 查看全量运行过的容器。
ctl+p+t 结束登录中的容器,退出容器
Registries and Repositories
Registries 仓库存储各种容器镜像的地方。
Repositories 库存储单一容器镜像的各种不同版本的地方。
Images 详解
bootfs 很少接触的层,但是有。
layer 0 base Image(rootfs) ubuntu os uuid 1
layer 1 nginx(application) uuid 2
layer2 updates (Updates) uuid 3
R/W 可读写层,读写行为发生在该层 uuid 4
每一层都有唯一uuid
共同组成一个docker image
docker images --tree可以查看layer 层组成的image树
或者ubuntu系统中通过 ls -l /var/lib/docker/aufs/layers/查看
或者通过ls -l /var/lib/docker/aufs/diff/uuid 来查看具体内容。
docker run ubuntu /bin/bash -c "echo 'cool content ' >/tmp/cool-file"
docker ps -a 查看已经结速
docker commit id fridge 将修改保存到新的image
docker images 可以看到fridge镜像
通过docker history fridge 可以查看镜像的历史。
docker save -o /tmp/fridge.tar fridge
查看指定目录下的压缩文件。
将文件拷贝到需要导入的机器上。
tar -tf /tmp/fridge.tar 查看文件镜像 centos系统。
docker load -i /tmp/fridge.tar
docker images 可以查看刚刚导入的镜像。
docker run -it fridge /bin/bash 查看上述写入的文件。
容器详解
通过docker run 来构建容器。
每个容器都有自己的可写层。
docker run -d ubuntu /bin/bash -c "ping 8.8.8.8 -c 30" 观察运行状态
docker ps
docker top containerid 查看运行id的信息
docker ps -a 查看所有的docker
docker run --cpu-shares=256 来控制一个容器能够得到多少个共享的CPU 1024是全量CPU 而256是4分之一
docker run memory =1g 来控制容器运行内存大小。
docker inspect containerid 来查看docker容器详细内容
docker attach containerid/Name 连接到容器。
CTR +C 退出容器。
容器管理
容器有自己独立的文件系统,网络和进程集合,可以启动、停止。重启。
docker run -it ubuntu /bin/bash
root@容器id 形式展示已经登录。
通过Ctrl+P+Q 可以退出当前已经登录的运行容器,但不结束容器运行。我们称为脱离容器。
通过docker ps 可以查看容器依然在运行。
如果在脱离docker容器情况下想停止运行中的容器,可以通过命令:
docker stop containerid/name 来停止运行中的容器。
然后再次通过docker ps 来查看,可以发现容器已经不在展示了。
docker ps -l 查看最后一个运行的容器
docker restart 重新启动一个运行过程中的容器。
PID1的理解
docker info 查看本地仓库安装docker情况
查看已经安装的docker的完整情况
ls -l /var/lib/docker/containers/
移除容器命令
docker rm containerId/containername 不过不能移除运行中的容器
否则报错:
要想强制删除则加-f命令
docker rm -f containerId/containername
给docker ps 定义别名
alias dps ="docker ps"
docker top containerId/name 查看运行中容器内部的进程
docker logs containerId/name 来查看容器运行的日志
docker -f logs containerId/name 来将容器运行日志输出到终端。
docker inspect containerId 查看容器的具体信息
docker inspect containerId | grep Pid 可以得到容器的进程id
nsenter -m -u -n -p -i -t 了解更多关于容器的信息
-m :mount namespace,
-u:uts namespace,
-n:network namespace,
-p:process namespace,
-i:ipc namespace,
-t:target,需要了解的目标进程。
nsenter -m -u -n -p -i -t pid /bin/bash/
登录到容器,并查看相关信息,如host主机信息,ip网络信息等。
exit 可以退出当前登录环境。但容器依然运行。
docker-enter containerId 也可以登录容器。
docker exec -it containerid /bin/bash/ 执行指定命令到容器。
如果没有安装nsenter
可以通过命令:docker run -v /usr/local/bin:/target jpetazzo/nsenter
通过Dockerfile 构建容器
Dockerfile普通的文本文件用于构建容器镜像
编辑一个Dockerfile通过vim或者其他文本编辑器。
vim Dockerfile
#Ubuntu based Hello World container
FROM ubuntu:15.04
MAINTAINER [email protected]
RUN apt-get update //RUN命令 每一个run 都会增加一层到我们的镜像
RUN apt-get install -y nginx
RUN apt-get install -y golang
CMD ["echo","Hello World"]
保存到当前目前,然后在当前目录执行如下命令
docker build -t helloworld:0.1 . 从当前目录里查找Dockerfile 文件并构建名为helloworld的0.1版本
docker image -tree 查看镜像树结构
docker history imageId 查看历史纪录
我们也可以去
https://github.com/tianon/docker-brew-ubuntu-core/blob/c7e9f7353aa24d1c35f501e06382aed1b540e85f/xenial/Dockerfile
查看ubuntu 的Dockerfile文件
注册和使用仓库
https://hub.docker.com/explore/ docker 官方仓库
需要先创建账号才能创建仓库,步奏类似github.
发布本地镜像到仓库
1,docker tag imageId repositoryname/imageName:versionNumber
2,docker push repositoryname/imageName:versionNumber 发送本地镜像到远端仓库,期间需要输入用户名和密码认证。
docker rm containerid1,containerid2 删除容器
docker rmi imageId1,imageId2,imageId3 移除本地仓库的镜像。
从指定远端获取镜像到本地的命令
docker pull repositoryname/imageName:versionNumber
docker run -d -p 5000:5000 registry 运行一个registry到5000端口
debian8.docker.course:5000 查看
深入理解Dockerfile
build cache 对构建过的docker有缓存可以使用,不再单独下载。
Dockerfile中每个RUN命令最后对应到docker容器是一层image
docker build -t="webserver" . 对当前目录下的Dockerfile文件构建镜像
docker run -d -p 80:80 webserver //ubuntu1404.docker.course
CMD runtime阶段执行,在容器运行阶段执行命令。等价于 docker run
RUN build阶段执行,添加层到镜像,用于设置app 。
除了CMD命令,还可以通过ENTRYPOINT 来执行, 且该命令不会被CMD命令覆盖。
ENTRYPOINT ["ECHO"]
ENV 命令在Dockerfile文件中定义变量
ENV var1=nnn var2=mmm
可以通过日志查看容器执行代码。
在启动容器过程中创建volume
docker run -it -v /test-vol --name=voltainer ubuntu:15.04 /bin/bash
可以通过命令行查看创建的volume
多个容器之间共享volume
docker run -it --volumes-from=voltainer ubuntu:15.04 /bin/bash
docker stop voltainer
docker rm -v voltainer
小结
docker网络
docker0 桥
docker run -it --name=net1 net-img //用net-img 镜像启动名为net1的容器。
暴露端口到本地需要两点:
在Dockerfile中写明
EXPOSE 80
然后启动docker的时候用命令-p指定。
docker run -d -p 本地端口:容器端口 --name=容器名 镜像名
我们可以通过本地浏览器输出带有本地端口的url来访问。
docker port web1 查看容器端口映射
使用udp协议来映射端口
docker run -d -p 本地端口:容器端口/udp --name=容器名 镜像名
也可以指定ip和端口的映射
docker run -d -p ip:port:cport --name=容器名 镜像名
docker 容器可以暴露多个端口
命令:EXPOSE 80 500 600 700 800
docker run -d -P --name=cname cimage
docker port cname 查看端口映射情况。
linking containers
Dockerfile文件
docker run --name=src -d img
docker run --name=rcvr --link=src:ali-src -it ubuntu:15.04 /bin/bash
docker inspect 查看rcvr 的情况
查看某容器是否有links
docker inspect src | grep Links
或者登录到容器
通过命令
cat /etc/hosts 查看
小结
docker 排错
docker Daemon logging
停止docker服务
service docker stop
启动容器指定log级别
docker -d -l debug &
也可以在docker配置文件中指定日志级别
vim /etc/default/docker 中添加
DOCKER_OPTS="--log-level=fatal"
service docker start
ps -ef | grep docker 查看启动docker进程的配置
Continer logging
docker logs containername 将日志输出到终端。
docker logs -f containername
使用volumes 来共享和持久化数据
Dockerfile模板
docker build -t="tagname" .
network 排错
指定docker 容器的ip地址范围
service docker stop
ip link del docker0
通过ip a 命令发现docker0已经没有了。
然后通过编辑配置文件来修改
vim /etc/default/docker
DOCKER_OPTS=--bip=150.150.0.1/24
通过service docker start 启动docker 服务
service docker status 查看docker 服务状态
再次通过命令ip -a 可以查看docker服务此时的ip范围已经被重新设置
ip tables 配置
iptables -L
iptables -L -v
vim /etc/default/docker
DOCKER_OPTS=--icc=false 默认为ture 如果为false则不允许容器之间通信
DOCKER_OPTS="--icc=true --iptables=false " 默认为ture 如果为false 不允许对iptables添加和修改规则。
小结