Docker入门

新项目与原项目使用环境不符,又要建立新的服务器,环境搭建繁琐,这时候Docker的优势就出来了。

官方描述

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。Docker利用Linux核心中的资源分脱机制,例如cgroups,以及Linux核心名字空间,来创建独立的软件容器。

Docker通常用于如下场景:

  • web应用的自动化打包和发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署和调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

官方入门教程https://docs.docker.com/get-started/

支持平台

桌面

Platform x86_64
Docker for Mac (macOS) yes
Docker for Windows (Microsoft Windows 10) yes

服务器

Platform x86_64/amd64 ARM ARM64 / AARCH64 IBM Power (ppc64le) IBM Z (s390x)
CentOS yes yes
Debian yes yes yes
Fedora yes
Ubuntu yes yes yes yes yes

基本操作

本文以 Debian/Ubuntu 操作系统作为参考

  • 中国环境需要换源(不换源可能无法下载或下载极慢)

    安装docker.io包之前,需要先设置使用backports源

    编辑 /etc/apt/sources.list 文件,加入下面这一句:
deb http://http.debian.net/debian jessie-backports main 

安装docker

  1. docker.io包安装
    确保已经按照第一步的操作步骤添加了backports源,然后执行下面的命令。
$ sudo apt-get update 
$ sudo apt-get install docker.io

确认docker运行是否正常。

$ sudo docker run --rm hello-world 

查看docker版本

$ docker version
  1. 官方的安装脚本一键安装

执行脚本方法如下:

wget -qO- get.docker.com | bash 

安装完成后,运行下面的命令,验证是否安装成功。

docker version 

启动 Docker

systemctl start docker 

查看 Docker 启动状态

systemctl status docker

允许 Docker 开机自启

systemctl enable docker 

Debian 如何删除docker?

Debian系统下面删除docker,要按照下面几个步骤来删除。

  1. 使用purge命令清除docker-io包。
$ sudo apt-get purge docker-io

或者用autoremove命令将不再使用的依赖的包删除掉。

$ sudo apt-get autoremove --purge docker-io 

需要注意的是上面的命令只是删除了docker.io包,并不会删除下载的镜像,产生的容器文件,卷,已经用户创建的配置文件。如果你觉得不爽,可以用下面的命令干掉它们:

$ rm -rf /var/lib/docker

然后手工删除创建的配置文件。

备注:docker这个名字已经被占用了,所以debian下面的docker的包的名字是docker.io。

  1. 常规卸载/删除 docker

    apt-get list installed | grep docker 查看 安装的docker内容

    apt-get -y remove docker-* 删除安装的 docker 内容

部署服务

拉取镜像

docker pull     ## docker pull teddysun/shadowsocks-libev 

查询某个镜像

docker search $name   ## docker search redis

检查运行中的镜像

  • 使用docker ps命令可以查看所有正在运行中的容器列表,

    docker ps
    

    或者

    docker ps -l
    
    docker images 
    
  • 使用docker inspect命令我们可以查看更详细的关于某一个容器的信息。

    docker inspect     
    

Recap and cheat sheet

## List Docker CLI commands
docker
docker container --help

## Display Docker version and info
docker --version
docker version
docker info

## Execute Docker image
docker run hello-world

## List Docker images
docker image ls

## List Docker containers (running, all, all in quiet mode)
docker container ls
docker container ls --all
docker container ls -aq

创建配置文件

启动容器

如范例中,定义的端口是 9000,那么在启动容器时就需要将 9000 端口映射到宿主机的对外端口上。
启动命令:

docker run -d -p 9000:9000 -p 9000:9000/udp --name ss-libev -v /etc/shadowsocks-libev:/etc/shadowsocks-libev teddysun/shadowsocks-libev 

docker run:开始运行一个容器。

-d 参数:容器以后台运行并输出容器 ID。

-p 参数:容器的 9000 端口映射到本机的 9000 端口。默认是映射 TCP,当需要映射 UDP 时,那就再追加一次 UDP 的映射。冒号后面是容器端口,冒号前面是宿主机端口,可以写成一致,也可以不一致。

–name 参数:给容器分配一个识别符,方便将来的启动,停止,删除等操作。

-v 参数:挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径,可以写成一致,也可以不一致。

teddysun/shadowsocks-libev:这是拉取回来的镜像路径。

当然,这里也可以启动 Tag 为 alpine 的镜像命令:

docker run -d -p 9000:9000 -p 9000:9000/udp --name ss-libev -v /etc/shadowsocks-libev:/etc/shadowsocks-libev teddysun/shadowsocks-libev:alpine 

注意:此处仅作为演示,不能同时执行上面的这两个启动命令,因为端口都是 9000,产生冲突了。

停止容器

利用如下命令可以停止正在运行中的容器:

docker stop $name

此处的 $name 就是在启动容器那一步定义的容器的识别符

启动容器

利用如下命令可以停止正在运行中的容器:

docker start $name

此处的 $name 就是在启动容器那一步定义的容器的识别符

删除容器

docker rm -f container-id 删除指定容器
docker rm $(docker ps -a -q) 删除所有容器

查看容器日志

docker logs $name

创建镜像

参考资料

  1. https://docs.docker.com/
  2. http://www.docker.org.cn
  3. https://teddysun.com/536.html