docker使用总结
链接
Docker 常用命令
安装docker
- ubuntu安装:curl -s https://get.docker.io/ubuntu/ | sudo sh
镜像管理
docker images:列出本地所有镜像 docker search <IMAGE_ID/NAME>:查找image docker pull <IMAGE_ID>:下载image docker push <IMAGE_ID>:上传image docker rmi <IMAGE_ID>:删除image
容器管理
``` docker run -i -t
/bin/bash:-i:标准输入给容器 -t:分配一个虚拟终端 /bin/bash:执行bash脚本 -d:以守护进程方式运行(后台) -P:默认匹配docker容器的5000端口号到宿主机的49153 to 65535端口 -p : :指定端口号 - -name: 指定容器的名称
- -rm:退出时删除容器
docker stop
docker attach
docker top
-f:查找特定信息,如docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’
docker commit -m "comment" -a "author" <CONTAINER_ID> ouruser/imagename:tag
docker extc -it <CONTAINER> <COMMAND>:在容器里执行命令,并输出结果 ``` #### 网络管理 ``` docker run -P:随机分配端口号 docker run -p 5000:5000:绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口) docker run -p 127.0.0.1:5000:5000:绑定主机的特定接口的端口号 docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py:绑定udp端口号 docker port <CONTAINER_ID> 5000:查看容器的5000端口对应本地机器的IP和端口号 使用Docker Linking连接容器: Docker为源容器和接收容器创建一个安全的通道,容器之间不需要暴露端口,接收的容器可以访问源容器的数据 docker run -d -P --name <CONTAINER_NAME> --link <CONTAINER_NAME_TO_LINK>:<ALIAS> ``` #### 数据管理 ``` Data Volumes:volume是在一个或多个容器里指定的特殊目录
数据卷可以在容器间共享和重复使用
可以直接修改容器卷的数据
容器卷里的数据不会被包含到镜像中
容器卷保持到没有容器再使用它 可以在容器启动的时候添加-v参数指定容器卷,也可以在Dockerfile里用VOLUMN命令添加
docker run -d -P --name web -v /webapp training/webapp python app.py 也可以将容器卷挂载到宿主机目录或宿主机的文件上,<容器目录或文件>的内容会被替换为<宿主机目录或文件>的内容,默认容器对这个目录有可读写权限
docker run -d -P --name web -v <宿主机目录>:<容器目录> training/webapp python app.py
可以通过指定ro,将权限改为只读
docker run -d -P --name web -v <宿主机目录>:<容器目录>:ro training/webapp python app.py
在一个容器创建容器卷后,其他容器便可以通过--volumes-from共享这个容器卷数据,如下:
docker run -d -v /dbdata --name db1 training/postgres echo Data-only container for postgres
首先启动了一个容器,并为这个容器增加一个数据卷/dbdata,然后启动另一个容器,共享这个数据卷
docker run -d --volumes-from db1 --name db2 training/postgres
此时db2使用了db1的容器卷,当容器db1被删除时,容器卷也不会被删除,只有所有容器不再使用此容器卷时,才会被删除
docker rm -v:删除容器卷 除了共享数据外,容器卷另一个作用是用来备份、恢复和迁移数据
docker run --volumes-from db1 -v /home/backup:/backup ubuntu tar cvf /backup/backup.tar /dbdata 启动一个容器数据卷使用db1容器的数据卷,同时新建立一个数据卷指向宿主机目录/home/backup,将/dbdata目录的数据压缩为/backup/backup.tar
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumes-from dbdata2 -v /home/backup:/backup busybox tar xvf /backup/backup.tar 启动一个容器,同时把backup.tar的内容解压到容器的backup
仓库管理
docker login:登录 ```
Docker 安装 Redis
docker pull redis:3.2
查找Docker Hub上的redis镜像:
docker search redis
这里我们拉取官方的镜像,标签为3.2:
docker pull redis:3.2
使用redis镜像
运行容器:
docker run -p 6379:6379 -v $PWD/data:/data -d redis:3.2 redis-server --appendonly yes
example:
docker run -p 6379:6379 -v /Users/yzy/redis/data:/data -d redis:3.2 redis-server --appendonly yes
docker run -p 6379:6379 --name redis3.2 -v /home/admin/redis/redis.conf:/etc/redis/redis.conf -v /home/admin/redis/data:/data -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yesyes
命令说明:
-p 6379:6379 : 将容器的6379端口映射到主机的6379端口
-v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
容器映射:
端口映射,data目录映射,配置文件映射:
docker run -p 6699:6379 --name myredis -v $PWD/redis.conf:/etc/redis/redis.conf -v $PWD/data:/data -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yes
命令说明:
--name myredis : 指定容器名称,这个最好加上,不然在看docker进程的时候会很尴尬。
-p 6699:6379 : 端口映射,默认redis启动的是6379,至于外部端口,随便玩吧,不冲突就行。
-v $PWD/redis.conf:/etc/redis/redis.conf : 将主机中当前目录下的redis.conf配置文件映射。
-v $PWD/data:/data -d redis:3.2 : 将主机中当前目录下的data挂载到容器的/data
--redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置
直接连接到redis容器中,直接上命令:
docker inspect myredis | grep IP ---先查询到myredis容器的ip地址。
docker run -it redis:3.2 redis-cli -h 192.168.42.32 ---连接到redis容器。然后就进入redis命令行了
日志
- 列出日志文件路径:
docker inspect --format='{{.LogPath}}' containername