Docker 的基本命令和使用


———————— 基本使用 ———————— 

 

// docker自身的大本营在:

//大本营
/var/lib/docker

// volumes 挂载:
/var/lib/docker/volumes

 

// 搜索和下载镜像:

docker search nginx    // 搜索镜像
docker pull nginx     // 下载官方的nginx,这个包名在搜索的结果中。

 

//  查看镜像、容器、网络、挂载卷

docker images    // 会看到当前已经下载的所有镜像,包括前面下载的nginx
docker ps    // 查看运行中的容器
docker ps -a    // 查看所有容器,包括已经停止了的容器
docker network ls    // 查看所有网络
docker history 016315c7d299    // 查看容器的每一层
docker inspect mynginx //获取容器/镜像的元数据
docker inspect mynginx | grep "IPAddress" | 获取 IP 地址
docker volume ls //查看所有挂载卷

 

 

// 启动、停止和删除镜像、容器、网络:

// 新建并启动一个容器,命名为 mynginx,使用镜像为 nginx:latest。请查看本词条下的说明
docker run --name mynginx -p 80:80 -v /data:/data -d nginx:latest
 
// 启动一个停止的容器
docker container start 016315c7d299

// 停止一个容器
docker container stop 016315c7d299
docker stop 4c0e37e3bc0c

// 停止所有容器
docker stop $(docker ps -aq)

// 删除镜像
docker rmi 4ab4c602aa5e

// 删除所有镜像
docker rmi $(docker images -q)

// 删除指定的容器 
docker rm 4c0e37e3bc0c 

// 删除所有容器 
docker rm $(docker ps -aq)

// 创建自定义网络
docker network create 自定义网络名

// 删除网络
docker network rm xxx

// 删除挂载卷
docker volume rm xxx

 

 

———— 使用镜像 nginx:latest,将容器命名为mynginx。以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

 

// 【重要】关于 -v 参数的说明,也就是创建数据卷。

-v /data:/data 表示,本地主机的 /data 目录挂载到 docker 的/data 目录下。这种方式的好处在于:

1.数据卷可以在容器之间共享和重用;
2.对数据卷的内容进行修改,会立刻生效;
3.数据卷内容并不包含在镜像中,所以不会影响镜像;

———— 所以,其实就是正常应该把项目放在数据卷中,因为数据卷是公用的,所以配置容器内的 nginx 指向项目目录即可。

 

 

// 在运行的容器中执行命令 - exec:

// 查看 docker 下的所有容器
docker ps

// 查看当前 docker-compose 下的容器
docker-compose ps

// 进入容器,你会发现你的机器名称变成了 docker 容器的名称
docker exec -it webserver bash 或者 docker exec -it f75a710a2b58 bash

// 在容器f75a710a2b58内进行 linux 命令行操作 
echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html 

// 在容器里面安装 vim
apt-get update 
apt-get install vim 

//退出  
exit

 

 

// 保存容器为新镜像 - commit - 一般不用这个,使用 dockerfile

// 将f75a710a2b58容器保存为新的镜像。
docker commit f75a710a2b58 mynginx:v1   

——  新的镜像里面的所有内容,都被保存了下来。包含改过的所有的配置文件。

 

// 标记一个 images ,

docker tag 1786dad83d25 hello-docker:1.0.0    //记得删除原来的tag

 

// 查看容器信息:

// 显示容器的进程
docker top mystifying_keller    // mystifying_keller是容器的名字

// 查看容器端口映射
docker port ngnix-test 或 docker port 016315c7d299     //80/tcp -> 0.0.0.0:80

//查看容器数据结构
docker diff 016315c7d299  或者 docker diff nginx-test 

// 查看容器日志记录
docker log mymysql1

 

 

 // 主机与docker之间数据拷贝:—— 少用,一般挂载就好了。直接把项目/数据放入容器的情况,一般是已经做好,直接卖的项目。

// 将主机 ~/index.html 文件拷贝到容器 96f7f14e99ab的 /usr/share/nginx/html/ 目录下。
docker cp ~/index.html 96f7f14e99ab:/usr/share/nginx/html  

// 将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中。
docker cp  96f7f14e99ab:/www /tmp/

 

// 导入和导出容器快照到本地文件:

// 导出快照
docker export 016315c7d299 > nginx_test.tar

// 导入快照( 导入后镜像仓库名为test/nginx,tag 为2.2 )
// 第一种、本地文件导入
cat nginx_test.tar | docker import - test/nginx:v2.2 
// 第二种使用 url 导入
docker import http://example.com/exampleimage.tgz test/nginx:v2.2 

 

// docker 中安装 vim:

apt-get update
apt-get install vim

 

// 查看网络:

// 查看 myphp 容器的内网地址
docker inspect myphp |grep '"IPAddress"'    //172.17.0.2

// 查看 mynginx 容器的内网地址:
docker inspect mynginx |grep '"IPAddress"'    //172.17.0.3

—— 使用 exec 进入容器,172.17.02和172.17.0.3是可以相互 ping 通的,可以相互通信。

 

 



———————— Registry镜像仓库 ————————

 

// 登录镜像仓库:

// 登录,server可选,如不写则默认是登录官方仓库。
docker login -u 用户名 -p 密码 [server]     

// 登出
docker logout

 

// 标记本地镜像,将其归入某一仓库:

// 打包镜像
docker tag nginx:latest raven666/nginx:v1.2   
 
// 推送镜像到仓库,你可以登录 hub.docker.com 查看自己的镜像
docker push raven666/nginx:v1.2 

//查找镜像
docker search raven666

—— 将本地 nginx:latest 镜像打包为 raven666/nginx:v1.2 镜像,raven666/nginx 为仓库名,v1.2为 tag。一般我们会命名为 => [名称/软件名:tag]

 

 

———————— 私有仓库 ————————

可以在本地建立仓库。并把镜像传到里面。格式按照 127.0.0.1:5000/ubuntu:latest 这样的格式进行 tag 。。具体不赘述。

 

  

 ———————— 数据持久化 ————————

 一、通过 volume 挂载卷,如:———— 数据持久化的最佳方式

需要在 Dockerfile 文件里面指定volumes 指定参数

volumes:
      - ${DIR_WWW}:${DIR_WWW}:rw
      - ./conf/nginx/conf.d:/etc/nginx/conf.d/:ro
      - ./conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./log/nginx/:/var/log/nginx/:rw

可以通过 docker volume 进行管理

 

二、Bind Mount方式:

run 的时候通过 -v 参数进行挂载本地:

docker run -p 80:80 --name mynginx \
-v $PWD/www:/www \
-v $PWD/nginx/conf.d:/etc/nginx/conf.d \
--privileged=true \
-d nginx

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-12-13 09:21  小寒1206  阅读(278)  评论(0编辑  收藏  举报