Z.S.K.'s Records

docker学习记录

docker知识点:

1.镜像是只读的,当镜像启动的时候就成了一个容器,容器会在镜像的最外一层加上一个可写层,当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的.

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身 如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象
容器每次启动的时候 ip地址都是随机分配的 如要分配固定的ip,详情请见docker-network部分
参考

2.运行镜像 docker run [-t -i –rm -d] image_name:tag_name
(其中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开 交互)
–rm 表示退出容器后自动删除容器 注意:-d 跟–rm 参数不能同时使用
-d 参数则是让镜像后台运行 执行完这条命令后会返回唯一容器号且会随机分配一个容器名(如果没有使用–name显性指定的话) 如果想进入容器 则
使用 docker attach container_id(使用容器名不可以) 如果想退出attach而不退出容器的话以下需要注意
如果docker run命令使用了 -i参数 则使用Ctrl-c则会退出整个容器,想要只退出attach而不退出容器 使用Ctrl-p+Ctrl-q
如果docker run命令没有使用-i参数 使用Ctrl-c则只会退出attach,容器不会退出
修改镜像 docker commit -m “add test.txt” -a “hxf0510” 0b4acac89bed centos:latest
上传镜像
docker push image_name:tag_name
下载镜像 docker pull image_name:tag_name (不加tag_name则下载latest)
给镜像添加标签 docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
查看本地镜像 docker images
查看运行的镜像 docker ps -a
停止运行容器 docker stop $(docker ps -a)
创建容器但是不运行 docker create -t -i image_name
启动已终止的镜像 docker start image_name
删除容器/删除镜像 docker rm container_name/docker rmi image_name
删除镜像前需要删除容器,即使这个容器没有运行!因为容器保存了这个镜像的运行状态
导出容器 docker export container_name >image_name.tar
导入容器快照 docker import container_name:[tag] 或者 docker load container_name:[tag]
这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息
(导入即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文
件时可以重新指定标签等元数据信息

  • docker logs Name/ID : 从一个容器中取日志
  • docker diff Name/ID : 列出一个容器里面被改变的文件或者目录
  • docker top Name/ID : 显示一个运行的容器里面的进程信息
  • docker cp Name:/container_path to_path :

从容器里面拷贝文件/目录到本地一个路径
如果需要在容器中安装软件如vim 时 可能会提示Unable to locate package vim
需要先 apt-get update 这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包
然后再 apt-get install vim
查看容器属性如IP: docker inspect –format ‘{{ .NetworkSettings.IPAddress }}‘ container_id (format后面的空格 network后面那个 . 是必需的)
3.使用dockerfile创建镜像时如果使用的是同一个dockerfile,再次创建时会使用上一次产生的镜像做为中间镜像,一个镜像最多127层,每一层都产生一个镜像,生成最终镜像后会删除所有的中间镜像
4.数据卷/数据卷容器
一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性

  • 实现数据持久化或共享.
  • 数据卷可以在容器之间共享和重复利用
  • 可以对数据卷里的内容直接进行修改
  • 对镜像的更新不会改变数据卷的内容
  • 卷会一直持续到没有容器使用他们

例如:在nginx容器中挂载本地html目录作为nginx的发布目录(nginx容器默认的目录为/usr/share/nginx/html)
启动容器:docker run -ti –name docker-nginx -p 8008:80 -v /usr/local/nginx/html:/usr/share/nginx/html:ro -d nginx:latest
进入容器:docker exec -ti docker-nginx bash
查看nginx容器默认的发布目录已经显示了本地的html文件中,使用了:ro属性则说明在容器中对html目录下的文件进行修改时会提示文件为只读不可修改
但是在本地修改html目录下文件时 则修改会同步到nginx容器
5.安装docker-compose
1.使用pip install -U docker-compose 则先需要安装python-pip(1.8版本),这个需要python,
python2.6需要升级到python3.5
步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tar -xf python3.5.tar.xz
cd python3.5
.configure --prefix=/usr/local
make
make install
make clean && make distclean
/usr/local/bin/python3 -V
#建立软链接 使系统默认使用python3
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/bin/python3 /usr/bin/python
#更新yum指向的python,因为yum的python已经指向python3,但是yum只能使#用python2,所以只能指向更名后的python2.6.6
vim /usr/bin/yum
#修改#!/usr/bin/python-->#!/usr/bin/python2.6.6
#安装pip
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar -xvf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2
#使用 Python 安装 setuptools
python setup.py install
curl https://bootstrap.pypa.io/get-pip.py | python
#安装docker-compose
pip install -U docker-compose

docker951

遇到的错误:

在升级完内核到3.14后启动docker报如下错误:vim /etc/cfconfig.conf 注释memory那行

docker952

参考文章:

转载请注明出处https://izsk.me


Z.S.K. wechat
Scan Me To Read on Phone
I know you won't do this,but what if you did?