手记

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 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中的工作路径。



作者:无知者云
链接:https://www.jianshu.com/p/ac410909e2cf


0人推荐
随时随地看视频
慕课网APP