在Ubuntu下安装docker
默认情况下Ubuntu需要使用docker的话,要加上sudo
Docker启动参数在/etc/default/docker中修改,
在Dockerfile中创建配置信息
curl -sSL https://get.docker.com | sudo sh
默认情况下Ubuntu需要使用docker的话,要加上sudo
可以创建docker组
sudo groupadd docker
sudo gpasswd -a #user docker
sudo reboot #重启
docker的log在
/var/log/upstart/docker.log
docker run ubuntu echo 'hello' 下载ubuntu镜像(如果不存在的话)并且打印hello
如果要调用docker的RESTful风格的api的话,可以
nc -U /var/run/docker.sock
get /info HTTP/1.1
#启停docker
sudo status docker
sudo service docker start
sudo service docker stop
sudo service docker restart
加入
DOCKER_OPTS='--label name=sakop -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
后即可供远程访问,本机自身的client访问时也不会出错。
这里的配置中第一个tcp是给远程访问的,第二个unix协议的是给本机访问的
然后远程client加上环境变量 DOCKER_HOST=tcp://addr:port 访问远程docker守护进程
想要使用回本机的话,只要将DOCKER_HOST置空
Docker命令组
<pre code_snippet_id="1586696" snippet_file_name="blog_20160224_8_5678738" name="code" class="html">docker run -i -t ubuntu /bin/bash 进入docker并进行交互式操作
在交互式命令中输入exit可以退出该容器,同时容器被关闭。
如果只是暂时退出容器,在term里输入ctrl p,ctrl q,将容器放入后台
输入docker ps可以重新看到。
然后使用docker attach container_name可以重新返回会话
docker ps 正在运行的
docker ps -a 所有的
docker ps -l 列出最新创建的
docker run --name=sakop 运行一个容器,并赋予他名字,
docker ps inspect sakop 列出容器详细信息的json
docker start -i sakop 重新运行该容器,注意在运行此命令前,sakop容器肯定已经通过docker run命令产生了,并且在run命令中如果是-d选项,那么为守护式容器,如果是-i -t则是交互式容器。如果sakop容器不是以守护式或者交互式启动的话,再次执行docker start -i 或 -d sakop将不产生效果。
docker rm sakop 删除该容器
docker rm `docker ps -aq` 一次性删除所有容器,-q代表只获取容器id
docker logs -tf --tail 10 sakop //显示容器的日志,带上时间戳,并且一直刷新,并且第一次只显示最后的10条
docker top sakop
docker run --name=daemon -d ubuntu /bin/sh -c "while true;do echo hello;sleep 1;done" 可创建一个守护进程
守护进程默认attach进去是一片空白,如果想要在里面干点别的事情使用 docker exec -it daemon /bin/bash
docker kill sakop 迅速杀掉守护进程,发送SIGKILL
docker stop sakop 停止守护进程,发送SIGTERM
docker port sakop 查看容器网络映射情况
</pre><pre code_snippet_id="1586696" snippet_file_name="blog_20160224_9_6409086" name="code" class="html"><span style="font-family: Arial, Helvetica, sans-serif;">Docker镜像</span>
<pre code_snippet_id="1586696" snippet_file_name="blog_20160224_9_6409086" name="code" class="html">docker info 查看docker原信息,其中包括镜像的存放路径
docker images
docker images -a 查看包含只读镜像的所有镜像
docker images ubuntu 查看ubuntu这个repository下的所有镜像
docker rmi ubuntu:latest
docker rmi #{image_id}
docker rmi $(docker images -q ubuntu)删除ubuntu这个repository下的所有image,docker images -q ubuntu的意思是只列出该repository下所有images的id,不列出其他信息
docker search ubuntu //搜索所有带有关键字ubuntu的repository,ubuntu不是一个镜像,而是仓库名
实质上,ubuntu是docker官方的Repository,用户自定义的仓库格式为 用户名/仓库名,而镜像的话为 <span style="font-family: Arial, Helvetica, sans-serif;">用户名/仓库名:标签名</span><pre code_snippet_id="1586696" snippet_file_name="blog_20160224_9_6409086" name="code" class="html">
docker pull ubuntu:14.04 //下载ubuntu这个Repository下的14.04这个镜像
构建自己的镜像(使用docker commit)
docker run -it ubuntu/14.04
apt-get update
apt-get install nginx
exit
docker ps -a //查看刚才的docker镜像,假设为happy_lemon
docker commit -a sakop -m "ubuntu with nginx" happy_lemon sakop/ubuntu_with_nginx //这样一个镜像就做好了
docker run -p 80 -d --name=nginx_test run sakop/ubuntu_with_nginx nginx -g "daemon off;"//启动nginx
docker port nginx_test //假设映射到主机的12345端口
curl http://localhost:12345
在Dockerfile中创建配置信息
FROM ubuntu:14.04
MAINTAINER sakop "sakopqiu@gmail.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80<pre code_snippet_id="1586696" snippet_file_name="blog_20160224_12_4936416" name="code" class="html">Docker命令
CMD 只能出现一次,且可以被docker run之后的命令所覆盖,写法鼓励使用数组,数组写法也适用于ENTRYPOINT
ENV KEY VALUE 设置环境变量
ENTRYPOINT ["nginx"] //然后运行docker run -d <span style="font-family: Arial, Helvetica, sans-serif;">sakop/ubuntu_with_nginx2 -g "daemon off",-g的这部分会作为参数传递给entrypoint这样执行的时候就会变成nginx -g "daemon off"</span>
<span style="font-family: Arial, Helvetica, sans-serif;">也可以加上 CMD ["-h"]和ENTRYPOINT混合使用,这样当docker run指定-g参数时仍然按照-g参数走,不指定的话,则搭配CMD里声明的-h =>nginx -h</span>
ADD src dest 将当前目录下的文件copy到容器的目标环境,ADD指令后的所有指令不存在缓存。源文件不能是构建目录之外的任何文件
然后在该Dockerfile的目录下执行docker build -t "sakop/ubuntu_with_nginx2" . //如果存在apt-get update这种时常需要更新源的指令时,可以指定--no-cache 构建完后可以通过docker history "sakop/ubuntu_with_nginx2"来查看镜像堆栈