-
Notifications
You must be signed in to change notification settings - Fork 1
introduction
#docker 入门
ubuntu 或 centos 等linux
sudo apt-get update
sudo apt-get install docker.io
sudo docker.io version
sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io
sudo groupadd docker
sudo gpasswd -a dormi330 docker
sudo service docker.io restart
docker version
RedHat家族(包括CentOS和Fedora)系列安装Docker需要3.8以上的kernel,另外还需要装Device Mapper,此外,CentOS6和RedHat6还需要安装EPEL。列一个大概的步骤供你参考哈:
####检查内核版本
uname -a
Linux darknight.example.com 3.10.9-200.fc19.x86_64 #1 SMP Wed Aug21 19:27:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
####检查device-mapper
ls -l /sys/class/misc/device-mapper
lrwxrwxrwx 1 root root 0 Oct 5 18:50 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
####如果没有安装device-mapper,请参考下面的命令:
sudo yum install -y device-mapper #安装DeviceMapper
sudo modprobe dm_mod #加载DeviceMapper模块
####CentOS6还需安装EPEL
sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
或 sudo rpm -iUvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
####安装docker
sudo yum install docker-io --enablerepo=epel
sudo docker -d &
docker version
####Docker在CentoOS6运行一个容器的时候出现下面的错误:可能是selinux权限拦截:cpu... readonly...
$ sudo docker run -i -t centos /bin/bash unable to remount sys readonly: unable to mount sys as readonly max retries reached 碰到这个问题需要修改Docker的配置参数把/etc/sysconfig/docker文件中的other-args更改为:
other_args="--exec-driver=lxc --selinux-enabled" 然后重新启动Docker服务
sudo /etc/init.d/docker restart
https://registry.hub.docker.com/ 上可以看到很多已有的镜像
docker search ubuntu:latest
docker search ubuntu:14.04
docker search ubuntu
docker search centos:6.5
docker pull centos:latest
docker images
docker run -ti centos:latest /bin/bash
bash-4.2# uname -a
bash-4.2# exit
detch: 后台运行,作为宿主机守护进程
attch: 将后台的container tty方式到激活此容器
docker run -d -t -i vector/centos /bin/bash
abxfs09xxx(容器ID)
ps: 如果用的attach得到了docker,但是exit,这样就会使得容器stop,下面的方法将使容器可以自由切换前后台:
docker run -t -i dormi330/centos /bin/bash
输入^P^Q(ctrl+p ctrl+q)退出容器(后台运行) docker attacth xxxxid 再次进入容器,修改后,想退出交互,按快捷键^P^Q即可。
docker ps
docker logs 容器insane
如果想tty方式进入该容器,attch(容器ID)
docker attch abxfs09xxx
docker run -ti centos:latest /bin/bash
bash-4.2#
bash-4.2# yum install -f net-tools
bash-4.2# exit
docker ps -l
| CONTAINER ID | IMAGE | COMMAND | 其他字段... |
| 30f62b73248b | centos:latest | /bin/bash | 其他字段值 |
docker images
docker images
docker rmi centos/v1
docker tag centos:latest centos_basic
docker images
docker ps -a
docker rm 30f62b73248b
docker run -t -i centos:latest /bin/bash
docker
docker run --help
-
run -v 参数表示挂载数据,如
docker run -t -i -v /home/wzq/upload-txt.txt:/host/abc.txt dormi330/tmv2 /bin/bash
将/home/wzq/upload-txt.txt 挂载到容器的 /host/abc.txt
从container中 修改/host/abc.txt 后退出,会影响原宿主文件
-
直接拷贝文件 http://stackoverflow.com/questions/22907231/copying-files-from-host-to-docker-container 格式
sudo cp [src file] /var/lib/docker/aufs/mnt/[容器完整id]/[容器文件位置]
$sudo cp file.txt /var/lib/docker/aufs/mnt/a9b21b28bc059ff5a2763504e7095ffb5877b8bddeb9caa114d1547d2211ab7b/root/file.txt
docker run -ti -p 9000:8080 centos/webapp /bin/bash docker port centos/app 8000 可以查看8000映射的宿主机端口,一般结合docker run -P 随机分配一个宿主机端口用
然会访问 宿主机器ip:9000就可以访问 容器中的web应用了 (9000是作为此docker进程转发端口,再开启docker新进程就换掉端口)
如 ie 中 http://172.16.1.43:9000/myapp/
宿主机器的ip 可以通过ipconfig 或 ifconfig查看
docker run -t -i --net=host dormi330/centos /bin/bash
--net=host 参数表示 容器使用 宿主机的网络
这在docker + zookeeper集群时尤为重要,不用此参数,会导致zookeeper 无法监听端口。
已经做好的images 可以通过save保存为文件,也可以上传到 https://registry.hub.docker.com/
-
保存为文件 docker save -o [save/image/to/path] [image name]
示例 docker images
docker save -o /home/wzq/docker/centos_v1 centos:latest加载保存的镜像
docker load -i [save/image/to/path]
示例
docker load -i /home/wzq/docker/centos_v1
-
上传到 docker hub上 首先到 https://registry.hub.docker.com/ 上注册,然后 add repository 如 dormi330/centos_v1
将自己要上传的镜像 重打tag,名字与你的 repository一致,然后push,期间需要登录一次
docker tag centos:latest dormi330/centos_v1
docker push dormi330/centos_v1
-
注意事项:使用save/load 的镜像,如果修改了进行push,貌似会有问题,可以去实验下
https://github.com/docker/docker/issues/6782
我个人测试了1.1.2 版本仍然有问题
所以save/load适合于 不再修改的docker 镜像
最好的方式是:将做好的镜像push网上,然后也save此镜像,如果修改则从网上pull该镜像,修改 commit push 然后save,覆盖之前save的文件
docker images -tree
docker rm -f $(docker ps -aq) // 删除所有已经停止的容器
docker kill $(docker ps -a -q) // 杀死所有正在运行的容器进程
docker rmi $(docker images -q -f dangling=true) // 删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q) // 删除所有镜像
docker commit $(docker ps -lq) imagexx 提交image镜像xx
# ~/.bash_aliases // 为这些命令创建别名,建立此bash文件
# 杀死所有正在运行的容器. alias dockerkill='docker kill $(docker ps -a -q)'
# 删除所有已经停止的容器. alias dockercleanc='docker rm $(docker ps -a -q)'
# 删除所有未打标签的镜像. alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
# 删除所有已经停止的容器和未打标签的镜像. alias dockerclean='dockercleanc || true && dockercleani'
1.进入root权限
sudo su
2.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
3.查看当前有些什么images
docker images
4.删除images,通过image的id来指定删除谁
docker rmi
想要删除untagged images,也就是那些id为的image的话可以用
docker rmi -f $(docker images -a| grep “^<none>” | awk “{print $3}”)
要删除全部image的话
docker rmi $(docker images -q)
docker top vector0822/centos // 查看此容器内部的进程列表
docker inspect vector/centos // 检查此docker容器的底层信息,json化输出
docker logs -f vector/centos // 这将使docker log命令中使用tail -f来查看容器标准输出