Ubuntu安装Docker

  1. sudo apt-get install docker
  2. sudo apt-get install docker.io
  3. 将当前用户加入到docker用户组中

    • sudo gpasswd -a ${User} docker
    • 重新登陆shell,就可以使用docker了

MacBook安装Docker

  1. brew install docker
  2. brew install docker-machine
  3. 下载安装virtual box下载地址
  4. 初始化 Virtual Box 的 default 虚拟机 docker-machine create --driver virtualbox default
  5. 下载最新的boot2docker,下载地址。上一步会自动下载,但是可能比较慢。
  6. 将boot2docker.iso 放在/Users/kevin/.docker/machine/cache目录下,然后执行第四步的命令就会自动使用cache进行安装了。
  7. 初始化环境变量:显示宿主机需要为 default 虚拟机设置的环境变量的指令 docker-machine env default,然后将在宿主机中设置相应的环境变量。eval $(docker-machine env default)

使用Docker

docker内时区不对:sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

Docker可以支持把一个宿主机上的目录挂载到镜像里。通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。

docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash

对于战斗力:docker run -d --name=ability_t0_citic --net=host -p 5001:5001 -v /home/lindyang/ability/data:/opt/ability/data -it ability:170425

打包tar -czf small.tar.gz small (目录名), 压缩并打包目录

解压tar -xzvf ***.tar.gz

向docker内部传递文件:cat posi_data_source.tar.gz | docker exec -i ability_citic bash -c "cat > /opt/ability/posi_data_source.tar.gz"

  • 查看镜像: docker images
  • 进入docker docker run -it somebox bash
  • 查看docker运行状态:docker ps -a

Dockerfile

一个简单的dockerfile

1
2
3
4
5
6
7
8
9
FROM
ubuntu:14.04
USER
root
RUN
apt-get install-y
apache2
EXPOSE
80
  • FROM 基于哪个镜像
  • RUN 安装软件使用
  • MAINTAINER 镜像创建者
  • CMD container启动时候执行的命令,dockerfile只能有一个cmd命令,多条就执行最后一条
  • USER 使用哪个用户跑container
  • EXPOSE container内部服务开启的端口,主机要用的时候要做端口映射,即-p参数
  • ENV 用于设置环境变量
  • ADD 将文件拷贝到container的文件系统对应的路径
  • WORKDIR 切换目录

一个dockerfile示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM ubuntu:16.04
MAINTAINER DongWeiming <ciici123@gmail.com>
ENV DEBIAN_FRONTEND noninteractive
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list
RUN apt-get update
RUN apt-get install python curl git zsh sudo vim -yq
RUN useradd -ms /bin/bash ubuntu
RUN echo "ubuntu ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
RUN echo "ubuntu:ubuntu" | chpasswd
USER ubuntu
workdir /home/ubuntu
RUN git clone https://github.com/dongweiming/web_develop
RUN cd /home/ubuntu/web_develop
EXPOSE 9000 3141 22 5000

从dockerfile构建镜像:docker build -t ability:170423 ./

加载镜像,启动容器

运行参数:

1
2
3
4
-P 默认匹配docker容器的5000端口号到宿主机的49153 to 65535端口,相当于随机分配端口号,
-p就是绑定特定端口号, 5001:5001指的是default虚拟机到容器的端口映射,相当于外部和容器都使用5001端口,在linux上,就是linux系统到容器的端口映射
-d 以守护进行方式运行,后台
-D 开启Debug模式

示例: docker run -d --name=ability -p 5001:5001 --net=host -it ability:170324

将修改了的container提交成新的image

docker commit container repository:tag,然后就可以将新的image导出放在其他地方使用。commit命令仅是一个临时创建Imange的辅助命令。不过最好是应该修复image的问题之后,修改源码的问题,也就是应该写一个新的Dockerfile文件来维护此Image。

将容器内的文件复制到host主机上

示例:docker cp container:path hostpath

加载导出镜像

示例:

1
2
docker save -o some.image some:latest
docker load -i ./some.image

导入导出镜像

如果要导出本地某个容器,可以使用 docker export 命令,导出容器快照到本地文件docker export container > ubuntu.tar

可以使用 docker import 从容器快照文件中再导入为镜像cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0

也可以通过指定 URL 或者某个目录来导入docker import http://example.com/exampleimage.tgz example/imagerepo

用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

删除

删除指定容器:docker rm container

删除指定的镜像: docker rmi image

运行日志

docker logs --tail=200 container

image中每一层image命令行的历史记录docker history image