Docker第三天常用命令

docker run ubuntu:15.10 /bin/echo "Hello world"
docker run 镜像名(可选) 容器名 要执行的命令
运行容器

service docker status
查看docker守护进程是否在运行(docker)

docker ps
查看运行的容器

docker ps -a
显示所有容器

docker run -i -t ubuntu:15.10 /bin/bash
进入交互式docker窗口
    -t:在新容器内指定一个伪终端或终端。
    -i:允许你对容器内的标准输入 (STDIN) 进行交互。
    
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
启动后台docker进程
    -d 后台启动
    
docker logs 容器id
查看容器内的标准输出

docker stop 容器id
停止容器

docker restart 容器id
重启容器

docker pull 镜像
拉取镜像(下载)

docker run -d -P training/webapp python app.py
启动web程序
    -d:让容器在后台运行。
    -P:将容器内部使用的网络端口映射到我们使用的主机上。
    
docker run -d -P 5000:5000 training/webapp python app.py
端口映射到我们使用的主机上 
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上。
-P :是容器内部端口随机映射到主机的高端口。
-p : 是容器内部端口绑定到指定的主机端口。
docker run -d -p 5000:5000 training/webapp python app.py
我们可以指定容器绑定的网络地址,比如绑定127.0.0.1。
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

docker run -d -P --name runoob training/webapp python app.py
当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用--name标识来命名容器

Docker 容器镜像删除 
1.停止所有的container,这样才能够删除其中的images:
docker stop $(docker ps -a -q)
如果想要删除所有container的话再加一个指令:
docker rm $(docker ps -a -q)
2.查看当前有些什么images
docker images
3.删除images,通过image的id来指定删除谁
docker rmi <image id>
想要删除untagged images,也就是那些id为<None>的image的话可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要删除全部image的话
docker rmi $(docker images -q)
【Error response from daemon: conflict: 
unable to delete 4ac2d12f10cd (must be forced) 
- image is referenced in multiple repositories】
【来自守护进程的错误响应:冲突:无法删除4ac2d12f10cd(必须强制) - 映像在多个存储库中被引用】
以上操作如不能删除镜像:执行如下
    docker container ls -a 列出所有容器(docker ps -a -q)
    删除所有容器
    docker rm -f  $(docker container ls -a)
    删除镜像
    docker rmi 镜像id
    
    curl -s http://ip.cn
    
强制删除容器db01、db02
docker rm -f db01 db02


docker port 容器id
可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。

docker logs -f  容器id
查看容器输出日志,类似linux tail -f

docker top 容器id
来查看容器内部运行的进程

docker inspect 容器id
查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息

docker ps -l 
查询最后一次创建的容器

docker rm 容器id 
删除不需要的容器

docker images 
来列出本地主机上的镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ 
我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。
我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。
docker search httpd

docker build 
构建新的镜像

接下来我们创建一个守护态的Docker容器,然后使用docker attach命令进入该容器。
docker run -itd ubuntu:14.04 /bin/bash

进入容器的几种方法:
    1、exec
        通过docker ps 查看需要进入的容器pid
        执行
            docker exec -it 246f35c432de /bin/bash
        退出容器,不会关闭容器,一般使用这个方法。
    2、attach
        通过docker ps 查看需要进入的容器pid
        docker attach pid
        退出容器会关闭容器,不推荐
    3、ssh
        在镜像(或容器)中安装SSH Server,这样就能保证多人进入
        容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有使用Docker的情况)也是这样做的。
        但是使用了Docker容器之后不建议使用ssh进入到Docker容
    4、nsenter
        系统默认将我们需要的nsenter安装到主机中
        如果没有安装的话,按下面步骤安装即可(注意是主机而非容器或镜像)
        具体的安装命令如下:
         wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
         tar -xzvf util-linux-2.24.tar.gz  
         cd util-linux-2.24/  
         ./configure --without-ncurses  
         make nsenter  
         sudo cp nsenter /usr/local/bin  
        nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。
        可以使用docker inspect命令来拿到该PID。
        docker ps
        可以使用docker inspect来查看该容器的详细信息。
        docker inspect 44fc0f0582d9
        docker inspect 246f35c432de | grep Pid
        如果要显示该容器第一个进行的PID可以使用如下方式
        docker inspect -f {{.State.Pid}} 44fc0f0582d9 
        在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。
        nsenter --target 3326 --mount --uts --ipc --net --pid
        退出容器,不会关闭容器。
        
docker tag 命令,为镜像添加一个新的标签。
docker tag 镜像id 镜像名:标签名(版本号)

docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs  -d nginx
-p 80:80:将容器的80端口映射到主机的80端口
--name mynginx:将容器命名为mynginx 
-v $PWD/www:/www:将主机中当前目录下的www挂载到容器的/www
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:将主机中当前目录下的nginx.conf挂载到容器的/etc/nginx/nginx.conf
-v $PWD/logs:/wwwlogs:将主机中当前目录下的logs挂载到容器的/wwwlogs

docker创建镜像
    两种方法
        1、通过更新已有的镜像容器,并提交镜像,来创建镜像。
            进入docker交互式窗口
            docker run -i -t ubuntu /bin/bash
            在容器中更新镜像
            apt-get update
            退出交互式窗口
            exit
            提交镜像
            docker commit -m="has update" -a="runoob" e218edb10161 ubuntu:v2
                -m:提交的描述信息
                -a:指定镜像作者
                e218edb10161:容器ID
                ubuntu:v2    指定要创建的目标镜像名和标签(版本)

        2、使用dockerfile来创建新的镜像
            1、创建一个dockerfile文件
                touch dockerfile
            2、添加指令
            FROM    centos:6.7
            MAINTAINER      Fisher "[email protected]"
            
            RUN     /bin/echo 'root:123456' |chpasswd
            RUN     useradd runoob
            RUN     /bin/echo 'runoob:123456' |chpasswd
            RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
            EXPOSE  22
            EXPOSE  80
            CMD     /usr/sbin/sshd -D
        每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
        第一条FROM,指定使用哪个镜像源
        RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
        然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
            docker build -t runoob/centos:6.7 .
                -t :指定要创建的目标镜像名
                .(上下文) :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

猜你喜欢

转载自blog.csdn.net/czy_6837/article/details/84325142