Docker学习笔记(3)——常用命令

查看docker 版本

docker version

查看docker 状态
docker info

从Docker Hub搜索某个image
docker search XXX

运行Docker官方的的基础镜像Alpine(取代了busybox):
docker run alpine

docker 在运行alpine之后就立即退出了,这是因为docker container会随着container中的主进程的退出而退出,即便我们使用了-d参数运行在detatched模式下也是如此。
启动并进入container:
docker run -it alpine sh

-it表示在交互方式下运行contianer,并分配一个命令行终端给container,sh表示在container中运行sh为其主进程,这里的sh会替代Dockerfile中的CMD。
查看正在运行的container
docker container ls //新方式 docker ps //老方式

查看所有的contianer(包含正在运行的和已经停止的)
docker container ls -a //新方式 docker ps -a //老方式

清理整个docker的无用数据
docker system prune -a

默认情况下该命令不会清除volume(好主意),如果要同时清除无用的volume:
docker system prune --volumes

删除所有停止掉的container
docker container prune

退出container之后,自动删除container
docker run --rm alpine

在后台运行container(detatched模式)
docker -it -d alpine sh

-d表示detatched模式,即不连接cotainer的标准输入输出,而attached模式会连接标准输入输出。需要注意的是,attached模式并不指登录到container中,但是如果container的主进程正式bash之类的命令行,那么attach便会连接到bash本身的输入输出,也即像登录到了container一样,但是此时运行exit会退出整个container。
登录到运行的container中
docker exec -it 97aae54c2fac sh

97aae54c2fac表示container的id,也可以使用container的name,此时运行exit不会退出container本身。
重新运行已停止的container
docker container start 97aae54c2fac

97aae54c2fac可以用container的id或者name,docker container start会采用所有在首次运行contianer时候的参数,包含volume、环境变量和运行等。另外,在模式情况下,docker contianer start总会在detatched模式下运行contianer。
网络端口映射
docker run -p 4000:3000 alpine

将contianer的3000端口映射到宿主机的4000端口。
文件夹映射
docker run -v /path-on-host:/path-in-container alpine

指定环境变量
docker run -e MY_ENV=some_value alpine

删除container
docker container rm container_id //新方式 docker rm container_id//老方式

以上命令只删除已经停止的container,如果要强制删除container,可以通过-f参数指定。
删除image
docker image rm image_id //新方式 docker rmi image_id //老方式

指定container的名称
docker run --name container_name alpine

停止container
docker stop container_id (or container_name)

列出正在运行的container
docker container ls //老方式 docker ps //老方式

link两个container
docker run -it --link source-container:alias alpine sh

link之后,在contianer的/etc/hosts中会多一条DNS解析到源container的ip,dns名则为alias,另外源contianer中的设置也将作为环境变量出现在所启动的container中。
查看所有的image
docker image ls //新方式 docker images //老方式

删除所有没用到的image
docker image prune -a

获取image 从Docker Hub中获取标有latest的官方image:
docker pull nginx

从Docker Hub 获取指定tag的官方image:
docker pull nignx:tag1

【Docker学习笔记(3)——常用命令】从Docker Hub中获取某个用户下的image:
docker pull username/repository:tag

从私有registry中获取image:
docker pull registry-host:5000/respository:tag

从Dockerfile构建image
docker build -t repository:tag .

请确保当前目录下存在名为Dockerfile的文件。
登录到Docker Hub
docker login

登录到私有Docker Registry
docker login host:port

上传Image 上传image到Docker Hub
docker push username/repository:tag

上传到私有Docker Registry:
docker push registry-host:5000/username/repository

Image和Container的文件系统 Docker采用分层的文件系统,即Image中的每一层都是不可变,而Container在Image的基础上,添加了一层可读写的层,并使用Copy-On-Write的方式完成对文件系统的修改, 这样对文件系统的修改将会作为一个新的层添加到既有层之上,而不是直接修改既有的层。
给image打tag
  1. 通过Image ID打tag:
    docker tag f2a91732366c mynewtag
  2. 通过Image名称打tag:
    docker tag image-name newtag,光是image名称还不能唯一确定一个image,因此此时会默认使用image-name:latest所指向的image。
  3. 通过Image名称和Tag打tag:
    docker tag image-name:tag newname:newtag
  4. 为私有Registry打tag
    docker tag f2a91732366c myregistry:5000/username/repository:tag
Docker中的tag有些歧义,比如我们在运行docker tag命令的时候,其实可以同时修改Repository的名字和TAG的名字,这里的Repository也即image的名称。
设置container的工作路径
docker run -it -w /home alpine sh

使用-w设置container中的工作路径。

    推荐阅读