Ubuntu Docker 安装使用
系统版本:Ubuntu 16.04.1 LTS \n \l
一 安装 Docker
更新APT镜像源
首先需要安装 apt-transport-https 包支持 https 协议的源。
- $ sudo apt-get install apt-transport-https ca-certificates
- sudo apt-get update
#添加 源的 gpg 密钥。
- sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
#添加 源
- sudo echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" >>/etc/apt/sources.list.d/docker.list
## 12.04 (LTS) 代号为 precise,14.04 (LTS) 代号为 trusty,15.04 代号为
## vivid,15.10 代号为 wily,16.04 代号为Xenial 。这里获取到代号为 trusty。
## 接下来就可以添加 Docker 的官方 apt 软件源了。通过下面命令创建
## /etc/apt/sources.list.d/docker.list 文件,并写入源的地址内容。非
## trusty 版本的系统注意修改为自己对应的代号。
## 示例 ubuntu 14.04
## sudo echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" >> /etc/apt/sources.list.d/docker.list
################################################################################
添加成功后,更新 apt 软件包缓存。
- $ sudo apt-get update
- sudo apt-get install -y docker-engine
二 Docker 实例
镜像管理
- docker images:列出本地所有镜像
- docker search <IMAGE_ID/NAME>:查找image
- docker pull <IMAGE_ID>:下载image
- docker push <IMAGE_ID>:上传image
- docker rmi <IMAGE_ID>:删除image
1, 获取镜像
下载 Docker 镜像 从 Docker Hub 中拉取或者更新指定镜像。
搜索需要的镜像 docker search 系统(ubuntu centos debain ......)
示例: docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 4410 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 65 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 30 [OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 26 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components... 25 [OK]
nickistre/ubuntu-lamp LAMP server on Ubuntu 8 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images... 6 [OK]
nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 6 [OK]
nimmis/ubuntu This is a docker images different LTS vers... 5 [OK]
maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK]
admiringworm/ubuntu Base ubuntu images based on the official u... 1 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 1 [OK]
jordi/ubuntu Ubuntu Base Image 1 [OK]
lynxtp/ubuntu https://github.com/lynxtp/docker-ubuntu 0 [OK]
teamrock/ubuntu TeamRock's Ubuntu image configured with AW... 0 [OK]
datenbetrieb/ubuntu custom flavor of the official ubuntu base ... 0 [OK]
life360/ubuntu Ubuntu is a Debian-based Linux operating s... 0 [OK]
esycat/ubuntu Ubuntu LTS 0 [OK]
widerplan/ubuntu Our basic Ubuntu images. 0 [OK]
croscon/ubuntu Crosconized Ubuntu 0 [OK]
smartentry/ubuntu ubuntu with smartentry 0 [OK]
webhippie/ubuntu Docker images for ubuntu 0 [OK]
ustclug/ubuntu ubuntu image for docker with USTC mirror 0 [OK]
konstruktoid/ubuntu Ubuntu base image 0 [OK]
dorapro/ubuntu ubuntu image 0 [OK]
也可以指定 STARS
实例 指定三星以上的
Flag --stars has been deprecated, use --filter=stars=3 instead
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 4410 [OK]
ubuntu-upstart Upstart is an event-based replacement for ... 65 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 30 [OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 26 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components... 25 [OK]
nickistre/ubuntu-lamp LAMP server on Ubuntu 8 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images... 6 [OK]
nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 6 [OK]
nimmis/ubuntu This is a docker images different LTS vers... 5 [OK]
下载 pull 容器
- docker pull ubuntu
查看镜像 : docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/lamp latest c2d6a728dcc6 18 hours ago 916.6 MB
nickistre/ubuntu-lamp latest b581b92b523a 12 days ago 634.3 MB
ubuntu 16.04 42118e3df429 13 days ago 124.8 MB
ubuntu latest 42118e3df429 13 days ago 124.8 MB
jdeathe/centos-ssh-apache-php latest fd85e9e81b24 3 months ago 306.6 MB
在列出信息中,可以看到几个字段信息
来自于哪个仓库,比如 ubuntu
镜像的标记,比如 14.04
它的 ID 号(唯一)
创建时间
镜像大小
其中镜像的 ID 唯一标识了镜像,注意到 ubuntu:16.04 和 ubuntu
具有相同的镜像 ID ,说明它们实际上是同一镜像。
具有相同的镜像 ID 怎么来的 : docker tag 42118e3df429 ubuntu:16.04
TAG 信息用来标记来自同一个仓库的不同镜像。例如 ubuntu 仓库中有多个镜
像,通过 TAG 信息来区分发行版本,例如
10.04 、 12.04 、 12.10 、 13.04 、 14.04 等。例如下面的命令指定使用
镜像 ubuntu:16.04 来启动一个容器。
- $ sudo docker run -t -i ubuntu:16.04 /bin/bash
如果不指定具体的标记,则默认使用 latest 标记信息。
列出
镜像有了 接下来就是 使用下载的镜像启动容器
2 启动容器 创建容器 创建镜像
容器管理
docker run -i -t <IMAGE_ID> /bin/bash:-i:标准输入给容器 -t:分配一个虚拟终端 /bin/bash:执行bash脚本
-d:以守护进程方式运行(后台)
-P:默认匹配docker容器的5000端口号到宿主机的49153 to 65535端口
-p <HOT_PORT>:<CONTAINER_PORT>:指定端口号
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb" 为容器指定一个名称;
--dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;
-h "mars" 指定容器的hostname;
-e username="ritchie" 设置环境变量;
--env-file=[] 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行;
--rm:退出时删除容器
docker run [options "o">] <image> [ "nb">command] "o">[arg...]
示例 :
- docker run -d -i -t -p 23.88.229.213:8081:80 --name ubuntu-docker-LAMP ubuntu/lamp
- docker stop <CONTAINER_ID>:停止container
- docker start <CONTAINER_ID>:重新启动container
- docker ps - Lists containers.
-
- -l:显示最后启动的容器
- -a:同时显示停止的容器,默认只显示启动状态
- docker attach <CONTAINER_ID> 连接到启动的容器
- docker logs <CONTAINER_ID> : 输出容器日志
-f:实时输出
- docker cp <CONTAINER_ID>:path hostpath:复制容器内的文件到宿主机目录上
- docker rm <CONTAINER_ID>:删除container
- docker rm `docker ps -a -q`:删除所有容器
- docker kill `docker ps -q`
- docker rmi `docker images -q -a`
- docker wait <CONTAINER_ID>:阻塞对容器的其他调用方法,直到容器停止后退出
- docker top <CONTAINER_ID>:查看容器中运行的进程
- docker diff <CONTAINER_ID>:查看容器中的变化
- docker inspect <CONTAINER_ID>:查看容器详细信息(输出为Json)
-f:查找特定信息,如docker inspect -f '{{ .NetworkSettings.IPAddress }}'
docker commit -m "comment" -a "author" <CONTAINER_ID> ouruser/imagename:tag
- docker extc -it <CONTAINER> <COMMAND> :在容器里执行命令,并输出结果
网络管理
- docker run -P:随机分配端口号
- docker run -p 5000:5000:绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口)
- docker run -p 127.0.0.1:5000:5000:绑定主机的特定接口的端口号
- docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:绑定udp端口号
- docker port <CONTAINER_ID> 5000:查看容器的5000端口对应本地机器的IP和端口号
使用Docker Linking连接容器:
Docker为源容器和接收容器创建一个安全的通道,容器之间不需要暴露端口,接收的容器可以访问源容器的数据
- docker run -d -P --name <CONTAINER_NAME> --link <CONTAINER_NAME_TO_LINK>:<ALIAS>
数据管理
Data Volumes:volume是在一个或多个容器里指定的特殊目录
数据卷可以在容器间共享和重复使用
可以直接修改容器卷的数据
容器卷里的数据不会被包含到镜像中
容器卷保持到没有容器再使用它
可以在容器启动的时候添加-v参数指定容器卷,也可以在Dockerfile里用VOLUMN命令添加
- docker run -d -P --name web -v /webapp training/webapp python app.py
也可以将容器卷挂载到宿主机目录或宿主机的文件上,<容器目录或文件>的内容会被替换为<宿主机目录或文件>的内容,默认容器对这个目录有可读写权限
- docker run -d -P --name web -v <宿主机目录>:<容器目录> training/webapp python app.py
可以通过指定ro,将权限改为只读
- docker run -d -P --name web -v <宿主机目录>:<容器目录>:ro training/webapp python app.py
在一个容器创建容器卷后,其他容器便可以通过--volumes-from共享这个容器卷数据,如下:
- docker run -d -v /dbdata --name db1 training/postgres echo Data-only container for postgres
首先启动了一个容器,并为这个容器增加一个数据卷/dbdata,然后启动另一个容器,共享这个数据卷
- docker run -d --volumes-from db1 --name db2 training/postgres
此时db2使用了db1的容器卷,当容器db1被删除时,容器卷也不会被删除,只有所有容器不再使用此容器卷时,才会被删除
docker rm -v:删除容器卷
除了共享数据外,容器卷另一个作用是用来备份、恢复和迁移数据
- docker run --volumes-from db1 -v /home/backup:/backup ubuntu tar cvf /backup/backup.tar /dbdata
启动一个容器数据卷使用db1容器的数据卷,同时新建立一个数据卷指向宿主机目录/home/backup,将/dbdata目录的数据压缩为/backup/backup.tar
- docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
- docker run --volumes-from dbdata2 -v /home/backup:/backup busybox tar xvf /backup/backup.tar
启动一个容器,同时把backup.tar的内容解压到容器的backup
仓库管理
docker login:登录
实例 :
上述docker images 输出可以看到有好几个 镜像. lamp 的镜像可以下载 不过我没有使用而是自己构建一个 LAMP的镜像
指定 ubuntu 镜像 启动一个容器
- docker run -t -i ubuntu /bin/bash
root@7aced629fce4:# cat /etc/issue
Ubuntu 16.04.1 LTS \n \l
就像新系统一样配置一个 LAMP 的环境
- apt-get update
- apt-get install vim curl net-tools
LAMP 环境
修改 apache的默认页便于查看
- cd /var/www/html/
- mv /var/www/html/index.html /var/www/html/index.html.bak
- echo "Hello welcome to Docker . This is Apache2 Default Page ." > /var/www/html/index.html
Hello welcome to Docker . This is Apache2 Default Page .
退出容器 (不能关闭容器,如果容器关闭所做的操作将没有了哦)
保存容器里的操作 为一个新的镜像
root@120413:# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu/lamp latest c2d6a728dcc6 24 hours ago 916.6 MB
ubuntu latest 42118e3df429 13 days ago 124.8 MB
启动 基于lamp镜像的容器
- docker run -d -i -t -p 23.88.229.213:8081:80 --name ubuntu-docker-LAMP ubuntu/lamp
- docker ps -a
root@120413:# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76405d443d72 ubuntu/lamp "/bin/bash" 23 hours ago Up 7 hours 22/tcp, 23.88.229.213:8081->80/tcp ubuntu-docker-LAMP
3a27f797bf36 ubuntu "/bin/bash" 26 hours ago Exited (0) 26 hours ago pensive_blackwell
进入 容器
启动 apache
service apache2 start
退出容器
查看效果
Hello welcome to Docker . This is Apache2 Default Page .
挂载本地磁盘
docker run -d -i -t -p 23.88.229.213:8081:80 -v /home/docker/test/:/home/wwwroot/88885345.com --name ubuntu-docker-LAMP-v ubuntu/lamp可以通过指定ro,将权限改为只读 即 只有宿主机可以更改
docker run -d -i -t -p 23.88.229.213:8081:80 -v /home/docker/test/:/home/wwwroot/88885345.com:ro --name ubuntu-docker-LAMP-v ubuntu/lamp
Docker 容器或镜像的导入导出命令介绍
涉及的命令有export、import、save、load
save
- 命令
- docker save [options] images [images...]
- 示例
- docker save -o nginx.tar nginx:latest
- 或
- docker save > nginx.tar nginx:latest
- 其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
load
- 命令
- docker load [options]
- 示例
- docker load -i nginx.tar
- 或
- docker load < nginx.tar
- 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
export
- 命令
- docker export [options] container
- 示例
- docker export -o nginx-test.tar nginx-test
- 其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
import
- 命令
- docker import [options] file|URL|- [REPOSITORY[:TAG]]
- 示例
- docker import nginx-test.tar nginx:imp
- 或
- cat nginx-test.tar | docker import - nginx:imp
区别
- export命令导出的tar文件略小于save命令导出的
- export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
- 基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。
建议 可以依据具体使用场景来选择命令
- 若是只想备份images,使用save、load即可
- 若是在启动容器后,容器内容有变化,需要备份,则使用export、import
没有评论