docker search centos # 搜索一个镜像,docker 去 https://hub.docker.com/ 搜索镜像
docker pull centos # 拉取centos镜像
docker image inspect centos # 查看镜像详细信息
docker images # 显示当前存在的镜像
docker rmi 67fa590cfc1c # 删除一个镜像 ,如果镜像已经创建了一个容器,则不能删除
docker save -o centos.tar centos # 导出一个镜像
docker load < centos.tar # 导入一个下载的镜像
docker load --input centos.tar # 导入一个下载的镜像
# 自己做测试的时候用一下,生产勿用
docker ps -a -q # 获取所有正在运行的容器的 CONTAINER ID
docker kill $(docker ps -a -q) # 停止所有正在运行的容器
docker rm $(docker ps -a -q) # 删除所有的容器
docker run # 启动容器
# docker run centos /bin/echo "hello world" 启动容器并且执行命令
# docker run --name my01 -it centos /bin/bash
# docker run --name my01 -it --rm centos /bin/bash
-name # 指定容器名称
-t # 分配一个tty 伪终端
-i # 让docker标准输入打开
-d # 后台运行
docker run --rm centos /bin/echo "AAAAA" # docker容器运行完后自动删除容器
docker start mydocker01 # 启动容器一个停止的容器
docker stop mydocker01 # 启动容器一个停止的容器
docker rm 60efb8acd854 # 通过ID删除一个容器
docker rm mydocker02 -f 强制 # 通过容器名称删除一个容器
docker attach mydocker01 # 进入一个运行中的容器,如果退出,则容器也停止运行
docker inspect -f "{{.State.Pid}}" mydocker01
7089
nsenter -t 7089 -m -u -i -n -p # 进入一个运行中的容器,如果退出,则容器不停止
docker exec mydocker01 whoami # 不进入正在运行的容器 执行命令返回结果
docker exec -it mydocker01 /bin/bash # 进入一个运行中的容器,如果退出,容器不停止
docker ps -a # 显示所有的容器
# 注意点: 当进入容器中,df free 都是物理机的信息,所以隔离性并不是特别高,但是可以通过其他方式解决
# 做私有云,可以不用管,当做公有云的时候就需要解决掉,
# 方法一进入docker容器
[root@test01 ~]# docker attach mydocker01 # 进入启动中的容器 通过attach进入容器后再退出,容器就停止了
# 方法二进入docker容器 nsenter 命令 yum install util-linux -y
# 获取正在运行容器的pid
[root@test01 ~]# docker inspect -f "{{.State.Pid}}" mydocker01
7089
[root@test01 ~]# nsenter -t 7089 -m -u -i -n -p # 退出,mydocker01不会退出
# 写个脚本,方便进入
[root@test01 ~]# vim docker_in.sh
#!/bin/bash
docker_in(){
NAME_ID=$1
NAME_PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})
nsenter -t ${NAME_PID} -m -u -i -n -p
}
docker_in $1
[root@test01 ~]# ./docker_in.sh mydocker01 通过脚本就进入mydocker01 容器了
# 方法 三 进入docker容器
[root@localhost ~]# docker exec mydocker01 /bin/sh
# docker 随机映射
docker run -P
# 指定映射
-p hostPort:containerPort
-p ip:hostPort:containerPort
-p ip::containerPort
-p 81:80 –p 443:443
iptables -t nat -vnL # NAT表映射
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
13 676 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32768 to:172.17.0.2:80
[root@test01 ~]# docker port nginx01 # 查看映射
80/tcp -> 10.10.10.190:80
[root@test01 ~]# docker run --name nginx02 -d -p 10.10.10.190:81:80 -p 443:443 nginx
a1c127b0112391c06abba45e955d50766a1606252d40654532654be5fb4c01d1
[root@test01 ~]# docker port nginx02
443/tcp -> 0.0.0.0:443
80/tcp -> 10.10.10.190:81
[root@test01 ~]# docker run --name nginx03 -d -p 82:80 -p 444:443 nginx
51018ae3574f97e0ec2942ab2954c1ae29e2554c0d7d365482ba62fc9bb0e51b
[root@test01 ~]# docker port nginx03
443/tcp -> 0.0.0.0:444
80/tcp -> 0.0.0.0:82
# ********** docker数据卷 volume 卷
# 第一中写法
docker run -d --name nginx-volume-test1 -v /data/ nginx # 挂载一个物理机上的目录 -v
[root@test01 ~]# docker inspect -f {{.Mounts}} nginx-volume-test1 # 查看物理机上/data目录存放的位置
[{volume 3e1fa6a583bc9c337edd73f4becab61787fd8de8c0aa5f9840deb1918995d090 /var/lib/docker/volumes/3e1fa6a583bc9c337edd73f4becab61787fd8de8c0aa5f9840deb1918995d090/_data /data local true }]
#第二种写法
[root@test01 ~]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data nginx
8e5e45474b1509baca61a36b230720b70b4e26f201a2d5f4989a79bc08a85cd1
[root@test01 ~]# docker run -d --name nginx-volume-test2 -v /data/docker-volume-nginx/:/data:ro # nginx # 只读的方式挂载
# 挂载文件
docker run --rm -it -v /root/.bash_history:/.bash_history nginx /bin/bash
# *********** docker数据卷容器 --volumes-from
# 不管 nginx-volume-test2 是否运行,都可以挂载和读取 适合多个容器之间共享数据
docker run -it --name volume-test3 --volumes-from nginx-volume-test2 centos /bin/bash
# 比如创建了一个nfs的容器并且挂载了 /root/nfs-data 目录
docker run -d --name nfs -v /root/nfs-data/:/data centos
# 其他容器 --volumes-from nfs 即可共享 nfs容器的 数据卷
root docker run --rm -it --volumes-from nfs centos /bin/bash