一,镜像管理指令

案例:


docker image save nginx:1.11 > nginx1.11.tar #导出镜像为tar包 docker load < nginx1.11.tar #导入镜像 docker ps #查看运行中容器 docker run -itd busybox #运行镜像,就变成一个运行中的容器 docker export 6hidudiiwdudw > bug.tar #导出容器文件系统到tar归档文件 docker image import bug.tar name:tag #导入容器文件系统归档tar文件创建镜像

二,创建容器常用指令

案例:

docker [container]  run -itd --name bs busybox  #用busybox这个镜像创建一个交互式+伪终端+后台运行名字叫做bs的容器; 【】里面这个指令可以省略
docker  ps #可以查看到映射关系 ,运行中的   加-a 查看所有
docker [container] attach bs
#进入容器,类似一个linux系统,正常退出终端后这个容器也同时退出了,如果不想这样就按Ctrl+p+q退出 docker start bs #启动停止了的容器
docker container run -itd -e a=113 --name bs1  bug  #用bug这个镜像创建一个容器,同时传递一个变量进去
docker exec -it bs1 sh   #进入容器的另一种方法,这种方法可以直接退出,不会关闭容器
/#ls
bin dev etc ....
/#echo $a    
123               #变量已经传递进来了
docker [container] run -itd -p 8080:80 --name nginx01  nginx  #启动容器,并把容器的80端口映射给主机的8080端口
docker ps  #可以查看到映射关系 ,运行中的   加-a 查看所有
docker logs nginx01  #查看容器内部日志
ls  /var/lib/docker/containers/ehduihdbdw(容器ID命名目录)/   #主机上容器日志地址,里面会有个日志,内存大的时候要主要清理
docker [container] run -itd -p 8080:80 --name nginx02 --restart=always nginx #这个断了后可以自动重启容器

 -p重要扩展

-p(小写)可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器。支持的格式有 hostPort:containerPort、ip:hostPort:containerPort、 ip::containerPort。

#将本地的 6000 端口映射到容器的 5000 端口;hostPort:containerPort(映射所有接口地址)
$ sudo docker run -itd -p 6000:5000 --name nginx01 nginx 

#指定映射使用一个特定地址
比如 localhost 地址 127.0.0.1;ip:hostPort:containerPort (映射指定地址的指定端口) $ sudo docker run -itd -p 127.0.0.1:5000:5000 --name nginx01 nginx #绑定 localhost 的任意端口到容器的 5000 端口,本地主机会自动分配一个端口;ip::containerPort (映射指定地址的任意端口) $ sudo docker run -itd -p 127.0.0.1::5000 --name nginx01 nginx #还可以使用 udp 标记来指定 udp 端口 $ sudo docker run -itd -p 127.0.0.1:5000:5000/udp --name nginx01 nginx #使用 docker port 来查看当前映射的端口配置,也可以查看到绑定的地址 $ docker port nostalgic_morse 5000 127.0.0.1:49155. #-p 标记可以多次使用来绑定多个端口 $ sudo docker run -itd -p 5000:5000 -p 3000:80 --name nginx01 nginx

 资源限制

$ docker [container] run -itd --cpus 1 --name nginx04 nginx  #指定容器可以使用的 CPU 个数就可以了,并且还可以指定如 1.5 之类的小数
$ docker [container] run -itd --memory  512m --name nginx04 nginx  #指定容器内存,并且swap默认是memory的2倍
$ docker [container] stats nginx04  #查看容器的资源利用率

 DOCKER 给运行中的容器添加映射端口

方法1
#获取容器IP
docker inspect container_name | grep IPAddress
#iptable转发端口
iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
方法2
#提交一个运行中的容器为镜像
docker commit containerid foo/live
#运行镜像并添加端口
docker run -d -p 8000:80 foo/live /bin/bash

三,管理容器常用指令

$ docker [container] ls  
$ docker [container] inspect 容器ID  #查看容器的详细信息
$ docker [container] attach nginx03  #用这种方式进入容器会卡死,
$ docker [container] top nginx03   #查看这个容器里面运行的进程,发现前端有个进程占用阻塞了
$ docker [container] exec -it nginx03  bash #可以用伪终端的方式进入容器
$ docker [container] commit bs1 busybox:v2 #bs1是有个运行中的容器,这个命令会提交一个叫做busbox,tag为v2的镜像
$ docker [container] exec bs1 ls /root  #bs1是个运行中的容器,查看这个容器root目录详情
$ docker [container] cp index.html bs1:/root  #拷贝文件到bs1容器中,
$ docker cp  96f7f14e99ab:/www /tmp/  #将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
$ docker port  nginx01 #查看端口映射关系
$ docker stats  nginx01 #查看容器实时资源的利用率情况
$ docker update --help  #实时修改容器的资源限制,具体命令看help
$docker ps -q -a   #列出所有容器ID
$ docker rm -f  $(docker ps -q -a)  #技巧,删除所有容器

四,管理应用程序数据

volume

$ docker volume ls   #查看数据卷
$ docker volume create  nginx-vol   #创建数据卷
$ docker volume inspect nginx-vol   #查看数据卷详情

#用卷创建一个容器
$docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx   # --mount src= 指定数据卷,dst 挂载的容器目录,如果没指定卷会自动创建
$docker run -itd --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx   # 这种写法更简洁,推荐

$docker exec -it nginx-test bash      
...  cd /usr/share/nginx/html     #容器的目录
...  ls
50x.html   index.html
退出
cd   /var/lib/docker/volumes/nginx-vol/_data/    #进入宿主机的数据券目录中
...  ls
50x.html  index.html         #在这里是同步的,2边增删改查都是一样的,类似软链接

#清理
docker [container] stop nginx-test
docker [container] rm nginx-test
docker volume rm  nginx-vol

 bind

#用bind卷创建一个容器
$docker run -itd --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx   
# 绑定卷,如果宿主机的/app/wwwroot不存在就会报错,挂载的时候如果/usr/share/nginx/html 里面有文件,则现有内容会隐藏

$docker run -itd --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx   # 这种写法更简洁,推荐

$docker inspect nginx-test  #验证绑定
 
#清理
$docker container stop nginx-test
$docker container rm nginx-test

 

posted on 2020-01-07 16:15  聪神carry  阅读(230)  评论(0编辑  收藏  举报