Docker学习笔记从安装到运行管理

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/<storage driver> linux系统中默认存储路径。

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 xueqinwu667@gmail.com

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 <args> <commond>

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添加和修改规则。

小结

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值