docker入门命令行

=================================================================================================================================
安装:
https://help.aliyun.com/document_detail/60742.html

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

 

查看:
docker info
=================================================================================================================================

默认安装完 docker 后,每次执行 docker 都需要运行 sudo 命令,非常浪费时间影响效率。如果不跟 sudo,直接执行 docker images 命令会有如下问题:

FATA[0000] Get
http:///var/run/docker.sock/v1.18/images/json: dial unix /var/run/docker.sock:
permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
于是考虑如何免 sudo 使用 docker,经过查找资料,发现只要把用户加入 docker 用户组即可,具体用法如下:

//如果还没有 docker group 就添加一个
sudo groupadd docker
//将用户加入该 group 内。然后退出并重新登录就生效啦。
sudo gpasswd -a ${USER} docker
//重启 docker 服务
sudo service docker restart
//切换当前会话到新 group
newgrp - docker

注意,最后一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效,所以 docker images 执行时同样有错。

 

===============================================================================================================================
https://zhuanlan.zhihu.com/p/21252578

 

## 运行第一个容器:
$ sudo docker run -i -t ubuntu /bin/bash
...
root@f7cbdac22a02:/#

-i标志保证容器中STDIN是开启的,尽管我们并没有附着到容器中。
-t标志则是另外“半边天”,它告诉Docker为要创建的容器分配一个伪tty终端
示例中使用的是ubuntu镜像。ubuntu镜像是一个常备镜像,也可以称为“基础”(base)镜像,它由Docker公司提供
最后,我们告诉Docker在新容器中要运行什么命令,在本例中我们在容器中运行/bin/bash命令启动了一个Bash shell。

## 检查容器的主机名
root@f7cbdac22a02:/# hostname
f7cbdac22a02

## 检查容器的/etc/hosts文件
root@f7cbdac22a02:/# cat /etc/hosts
...

## 检查容器的接口
root@f7cbdac22a02:/# ip a
...

## 检查容器的进程
root@f7cbdac22a02:/# ps -aux

## 在第一个容器中安装软件包
root@f7cbdac22a02:/# apt-get update && apt-get install vim

当所有工作都结束时,输入exit,就可以返回到Ubuntu宿主机的命令行提示符了。
这个容器现在怎样了?容器现在已经停止运行了!
但容器仍然是存在的,可以用docker ps -a命令查看当前系统中容器的列表
如果指定-a标志的话,那么docker ps命令会列出所有容器,包括正在运行的和已经停止的。

## 给容器命名
$ sudo docker run --name bob_the_container -i -t ubuntu /bin/bash
root@aa3f365f0f4e:/# exit

## 启动已经停止运行的容器
$ sudo docker start bob_the_container
$ sudo docker start aa3f365f0f4e

## 附着到正在运行的容器
$ sudo docker attach bob_the_container
$ sudo docker attach aa3f365f0f4e
root@aa3f365f0f4e:/_#_

## 创建长期运行的容器
$ sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker run命令使用了-d参数,因此Docker会将容器放到后台运行。
如果执行docker ps命令,可以看到一个正在运行的容器

## 获取守护式容器的日志
$ sudo docker logs daemon_dave

## 跟踪守护式容器的日志
$ sudo docker logs -f daemon_dave

## 跟踪守护式容器的最新日志
$ sudo docker logs -ft daemon_dave

## 查看守护式容器的进程
$ sudo docker top daemon_dave

## 显示一个或多个容器的统计信息
$ sudo docker stats daemon_dave daemon_kate daemon_clare daemon_sarah

## 在容器中运行后台任务
$ sudo docker exec -d daemon_dave touch /etc/new_config_file

## 在容器内运行交互命令
$ sudo docker exec -t -i daemon_dave /bin/bash

## 停止正在运行的Docker容器
$ sudo docker stop daemon_dave
$ sudo docker stop c2c4e57c12c4

## 自动重启容器
$ sudo docker run --restart=always --name daemon_dave -d ubuntu /
bin/sh -c "while true; do echo hello world; sleep 1; done"
--restart标志被设置为always。无论容器的退出代码是什么,Docker都会自动重启该容器。

$ sudo docker run --restart=on-failure:5 --name daemon_dave -d ubuntu /
bin/sh -c "while true; do echo hello world; sleep 1; done"
除了always,还可以将这个标志设为on-failure,这样,只有当容器的退出代码为非0值的时候,才会自动重启。
另外,on-failure``还接受一个可选的重启次数参数,如代码清单3-31所示。

## 查看容器
$ sudo docker inspect daemon_dave

## 删除容器
$ sudo docker rm 80430f8d0921

##删除所有容器
$ sudo docker rm `sudo docker ps -a -q`

 

==========================================================================================================================================
## 列出本地的镜像
$ docker images

## 在Docker Hub上搜索镜像
$ docker search busybox # 搜索image名字包含busybox的镜像

 

=============================================================================================================================

## 创建Dockerfile

FROM openjdk //指定base镜像
MAINTAINER Zhongqiang Shen //描述镜像的创建者

WORKDIR /tmp //设置容器内的当前工作目录
ADD http://apache.osuosl.org/zookeeper/stable/zookeeper-3.4.10.tar.gz /tmp //将URL中的内容下载到指定目录中
RUN tar -xzf zookeeper-3.4.10.tar.gz
RUN mv zookeeper-3.4.10 /opt/zookeeper //在容器中解压zookeeper包,并将加压后的包移到/opt/zookeeper位置
WORKDIR /opt/zookeeper
RUN echo "tickTime=2000" >> conf/zoo.cfg
RUN echo "dataDir=/var/lib/zookeeper" >> conf/zoo.cfg
RUN echo "clientPort=2181" >> conf/zoo.cfg //撰写conf/zoo.cfg
EXPOSE 2181 //暴露容器的2181端口
CMD ["/opt/zookeeper/bin/zkServer.sh", "start-foreground"]
//启动zookeeper进程,使用CMD关键字。start-foreground参数让zookeeper在前台运行,如果没有这个参数,.sh脚本退出后会导致容器也退出


## 创建完Dockerfile,就可以用下面的命令来创建镜像了
$ docker build -t zookeeper .
Sending build context to Docker daemon 5.632kB
Step 1/12 : FROM openjdk
...

## 可以用下面的命令来启动它
$ docker run zookeeper

===========================================================================================================================
多容器部署: https://zhuanlan.zhihu.com/p/31436920

## 首先安装Docker Compose
$ apt-get install docker-compose

## 定义docker-compose.yml,如下:
version: '2' //指定Docker Compose的版本
services:
zookeeper:
container_name: iop-zookeeper //指定容器的名字
image: jplock/zookeeper //指定使用的镜像的名字
ports:
- "2181:2181" //定义端口映射
kafka:
container_name: iop-kafka
image: wurstmeister/kafka
environment: //设置环境变量
KAFKA_ZOOKEEPER_CONNECT: iop-zookeeper:2181
KAFKA_CREATE_TOPICS: "metrics"
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_BROKER_ID: 1
ports:
- "9092:9092"
links: //定义容器之间的关联关系和依赖关系,这里kafka依赖于zookeeper,定义了这个依赖关系后,kafka启动前会先启动zookeeper
- zookeeper

## 定义了docker-compose.yml文件后,就可以通过如下命令来一键启动服务
$ docker-compose up -d # -d表示后台模式运行服务
Pulling zookeeper (jplock/zookeeper:latest)
...

## 运行下列命令可以看到容器已启动
$ docker ps

 

===========================================================================================================================

posted @ 2018-04-18 23:12  soul.stone  阅读(212)  评论(0编辑  收藏  举报