docker指令参考:https://www.runoob.com/docker/docker-command-manual.html
下载安装
省略
一、容器的管理
1.docker version
# 拉取hello-world镜像 docker pull hello-world # 使用hello-world创建并运行一个容器 docker run hello-world
3. 在新的虚拟bash环境,运行ubuntu 容器(container)
docker run -it ubuntu
lxg@lxg-opt:~/00$ docker run -it ubuntu root@8e4715eb71a3:/#
4. 查看当前正在运行的image,(container化的image)
docker ps
或 docker container ls
5. 查看当前所有的image
docker ps -a
lxg@lxg-opt:/$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e4715eb71a3 ubuntu "/bin/bash" 2 minutes ago Up 2 minutes affectionate_fermi e2d00352b256 ubuntu "/bin/bash" 4 minutes ago Exited (130) 4 minutes ago nostalgic_pascal 4243d653b7a6 ubuntu "/bin/bash" About an hour ago Exited (0) About an hour ago nervous_franklin 6cb28f6e4c68 ubuntu "-network host" About an hour ago Created naughty_bhabha 104c2d24f695 ubuntu "--network host" About an hour ago Created pensive_villani
up:正在运行
exited:以前运行的容器已经退出了
created:创建
5. 删除以前生成的image(用CONTAINER id或name)
docker rm pensive_villani 或
docker rm 104c2d24f695
# 删除所有容器
docker rm $(docker ps -a -q)
# 删除所有退出的容器 docker container prune
6. 运行image, 为相应的container 定制名称:
运行hello-world镜像,容器名称是test_container,查看结果:
docker run --name test_container hello-world
lxg@lxg-opt:/$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4639fda59506 hello-world "/hello" 6 seconds ago Exited (0) 4 seconds ago test_container
7.容器和host之间复制文件
(1)确认容器
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72ca2488b353 my_image X hours ago Up X hours my_container
(2)从host拷贝到容器:
$ docker cp foo.txt 72ca2488b353:/foo.txt
(3)容器拷贝到host:
$ docker cp 72ca2488b353:/foo.txt foo.txt
8. 进入容器。
(1)进入正在运行的容器
$ sudo docker exec -it 775c7c9ee1e1 /bin/bash
或者
$ sudo docker attach 容器ID
(2)另外一种启动容器的方式就是启动一个已经停止运行的容器:
docker start container_id
(3)要停止正在运行的容器可以使用docker container stop或docker stop命令,如下:
docker stop container_id
(4)创建守护状态的新容器
$ sudo docker run -itd ubuntu:14.04 /bin/bash
二、镜像image的管理
1 # 列出所有镜像
docker image ls
简写:docker images
2#拉取镜像
(1)docker pull centos
(2)docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
拉取一个镜像,需要指定Docker Registry的地址和端口号,默认是Docker Hub,还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名,另外,仓库名则由作者名和软件名组成。
(3)上面使用CentOS,因为省略作者名,则作者名library,表示Docker官方的镜像,所以上面的命令等同于:
docker pull library/centos:latest
(4)如果拉取非官方的第三方镜像,则需要指定完整仓库名,如下:
docker pull mysql/mysql-server:latest
(5) 通过镜像创建一个容器
docker run -it centos /bin/bash
(6)删除镜像, 注意如果镜像的容器未删除,则镜像不可删除
dockere image rm image_name/image_id
三、小总结
没有运行着的容器
lxg@lxg-opt:/$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
查看所有容器,不论是否运行
lxg@lxg-opt:/$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7b5b96a7149 ubuntu "/bin/bash" 16 hours ago Exited (0) 2 minutes ago hopeful_davinci
运行容器的2中模式
lxg@lxg-opt:/$ docker start hopeful_davinci #运行这个容器,但不进入终端交互模式 lxg@lxg-opt:/$ docker start -i hopeful_davinci #运行这个容器,并进入终端交互模式
注意,通过docker start启动多个终端,是无效的,会重复一个command,需要用docker exec启动多个终端。
运行了
lxg@lxg-opt:/$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7b5b96a7149 ubuntu "/bin/bash" 16 hours ago Up 2 seconds hopeful_davinci
上述,虽然运行了,但没进入容器,不是交互模式,可以用docker exec进入交互模式
lxg@lxg-opt:/$ docker exec -it hopeful_davinci bash root@e7b5b96a7149:/#
用法: docker exec -it containerName bash
docker exec只能进入运行着的容器,如果容器未运行,则不可进入。
四、docker组织和架构
lxg@lxg-opt:/$ docker version Client: Version: 18.09.7 API version: 1.39 Go version: go1.10.4 Git commit: 2d0083d Built: Fri Aug 16 14:19:38 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.09.7 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 2d0083d Built: Thu Aug 15 15:12:41 2019 OS/Arch: linux/amd64 Experimental: false lxg@lxg-opt:/$
可以看到,安装了docker后,宿主机器会有client和server ,而registry在远程的 docker hub (类似于github)