从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件

Docker 入门和常用的命令

发布:蔺要红10-28分类: Docker


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  mydocker01  -t -i 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






温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站