docker基本使用

docker帮助命令

1
2
3
docker version 显示版本信息
docker help 帮助
docker info 基本信息

docker镜像命令

1
2
3
4
docker images
# 可选项
-a, --all # 列出所有镜像
-q, --quite # 只显示镜像的id

docker search 搜索镜像

1
2
# 可选项
--filter=STARS=3000 # 搜索星在3000以上的

docker pull 下载镜像

1
2
# 下载镜像 docker pull 镜像名 tag
# 如果不写tag默认就是最新版

删除容器

1
2
docker rm -f id # 删除指定容器
docker rm -f $(docker images -qa) # 删除所有容器

docker容器命令

新建容器并启动

1
2
3
4
5
6
7
8
--name = "名字" # 给容器起一个名字
-d # 后台方式运行
-it # 使用交互式方式运行
-P # 指定容器的端口
1.ip:主机端口:容器端口
2.主机端口:容器端口(常用)
3.容器端口
-p # 随机端口

使用

1
2
3
4
chenci@MacBook-Pro ~ %docker run -it centos /bin/bash

退出
exit

查看运行的容器

1
2
3
4
docker ps 
# -a 历史运行过的容器
# -n=? 显示最近创建的容器
# -q 只显示容器的编号

启动和停止容器

1
2
3
4
docker start id #启动容器
docker restart id #重启容器
docker stop id #停止当前正在运行的容器
docker kill id #强制停止当前容器

查看日志

1
docker logs -tf --tail 日志条数 id

查看镜像元数据

1
docker inspect id

进入正在运行的容器

1
2
3
4
5
# 方法一
docker attach id # 进入容器正在执行的终端

#方法二
docker exec -it id bashshell #进入容器后开启新的终端

从容器拷贝文件到主机

1
docker cp id:容器内路径 目标主机路径

实例-安装nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.搜索镜像
docker search nginx

2.拉取镜像
docker pull nginx

3.启动并映射到本地3344端口
docker run -d --name nginx01 -p 3344:80 nginx

4.测试
curl localhost:3344

5.进入容器
docker exec -it nginx01 /bin/bash

实例-安装tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.拉取镜像
官方版
docker run -it --rm tomcat:9.0 #没有此镜像就会去自动下载,--rm退出后就删除镜像,一般用于测试

1.拉取镜像
docker -pull tamcat

2.启动并映射
docker run -d -p 3355:8080 --name tomcat01 tomcat

3.测试访问,发现404
curl localhost:3355

4.进入容器
docker exec -it tomcat01 /bin/bash

5.拷贝
cp -r webapps.dist/* webapps/

commit镜像

1
2
3
4
5
6
7
8
docker commit 提交容器成为一个新的副本

#与git相似
docker commit -m='提交的描述信息' -a='作者' 容器id 目标镜像名:[tag]

#1.利用原来的tomcat制作一个新镜像
docker commit -a='chenci' -m='add webapps' id tomcat02:1.0

容器数据卷

1
为了容器的持久化和同步操作

使用数据卷

1
2
挂载
docker run -it -v 主机目录:容器目录

测试同步mysql

1
2
3
4
5
6
7
8
#1.启动并映射端口,设置密码
docker run -d -p 3310:3306 -v /Users/chenci/guazai/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name some-mysql mysql:5.7

#2.远程连接
mysql -uroot -p123456 -h 10.30.3.100 -P 3310

#3.在远程连接中创建数据库测试
测试无误,本地和容器中都会多一个测试数据库

具名和匿名挂载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#只写了容器内的路径,就是匿名挂载
docker run -it -P --name nginx -V /path id
#查看
local 6c71f963cc89b24d16b4b47cb35df42445ff9d9395753b192ba72cbbbc22d583


#写了名字就是具名挂载
docker run -it -P --name nginx -V juming /path id
#查看
local juming


#查看所有的volume
docker volume ls

#查看卷
docker volume inspect juming

通过具名可以方便找到一个卷通所以一般使用具名挂载

1
2
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #匿名挂载

扩展

1
2
#在路径后面跟:ro或则rw
ro表示这个路径只能通过宿主机来操作,容器内部无法操作