systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
systemctl status docker
active
:active
消失了,还会提示当前的 docker
状态是 inactive(dead)
(死亡):docker version
docker info
docker --help
docker pull --help
docker images
# 或
docker image ls
docker system df
docker search [镜像名]
docker search --filter=STARS=9000 mysql
:docker pull [镜像名]
docker pull [镜像名]:tag
tag
(版本号),即默认拉取 docker
仓库中该镜像的最新版本,相当于命令 docker pull [镜像名]:latest
。比如说拉取最新版的 mysql
,则可以输入如下命令:docker pull mysql
tag
,则是拉取指定版本。比如说拉取 mysql 5.7.30
,则可以输入如下命令:docker pull mysql:5.7.30
docker run [镜像名]
docker run [镜像名]:tag
tomcat
,运行以下命令:docker run tomcat
可以使用 Ctrl+c
退出。
# -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。
# 这里打算进入 bash 执行一些命令并查看返回结果,因此需要交互式终端。
# --rm:这个参数的意思是,容器退出后随之将其删除。默认情况下,除了排障需求,退出的容器并不会立即删除,除非手动 docker rm。
# 这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
# ubuntu:18.04:这里指用 ubuntu:18.04 镜像为基础来启动容器。
# bash:放在镜像名后的是命令,这里希望有个交互式 Shell,因此用的是 bash。
docker run -it --rm ubuntu:18.04 bash
# 删除一个镜像
docker rmi -f 镜像名/镜像ID
# 删除多个镜像:其镜像ID或镜像用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
# 删除全部镜像:-a 意思为显示全部,-q 意思为只显示ID
docker rmi -f $(docker images -aq)
# 删除所有仓库名为 redis 的镜像
docker image rm $(docker image ls -q redis)
# 删除所有在 mongo:3.2 之前的镜像
docker image rm $(docker image ls -q -f before=mongo:3.2)
docker image rm 镜像名/镜像ID
tar
压缩文件,这样方便镜像转移和保存,然后,可以在任何一台安装了 docker
的服务器上加载这个镜像。docker save 镜像名/镜像ID -o 镜像要保存的位置和名字
例如:docker save tomcat -o /myimg.tar
保存镜像任务执行完毕,我们可以看一下指定位置是否有该 tar
:
docker
的地方加载镜像保存文件,使其恢复为一个镜像。docker load -i 镜像保存文件位置
可以先将之前的 tomcat
镜像删除掉,因为一开始就已经保存了:
查看镜像,测试镜像功能是否正常。
我们可以把解压的镜像 run
一下:
docker
标签,但是根据环境进行区分为 develop
环境与 alpha
环境,这时候,我们就可以使用 tag
,来对镜像做一个标签添加,从而进行区分;版本迭代逻辑也一样,根据不同的 tag
进行区分。develop
:开发环境。 alpha
:用于进行初步测试和验证的环境,常常是在软件开发的早期阶段使用。app:1.0.0 基础镜像
# 分离为开发环境
app:develop-1.0.0
# 分离为 alpha 环境
app:alpha-1.0.0
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker tag 源镜像名;TAG 想要生成新的镜像名:新的TAG
# 如果省略 TAG,则会为镜像默认打上 latest TAG
docker tag aaa bbb
# 上面的操作等价于下面这行语句
docker tag aaa:latest bbb:latest
举例如下:
# 我们根据镜像 quay.io/minio/minio 添加一个新的镜像,名为 aaa,标签 Tag 设置为 1.2.3
docker tag quay.io/minio/minio:1.2.3 aaa:1.2.3
# 我们根据镜像 app-user:1.0.0 添加一个新的镜像,名为 app-user,标签 Tag 设置为 alpha-1.0.0
docker tag app-user:1.0.0 app-user:alpha-1.0.0
注:我是这样理解 docker
容器的:可以将它类比于 C++ 中 new
出来的对象(docker run 镜像
:产生一个该镜像具体容器实例),docker
容器的启动需要镜像的支持。
docker
容器都是独立和安全的应用平台。可以理解为:每一个 docker
容器都相当于在我们的服务器上占用资源然后开辟了属于自己的一个空间(也可以理解为服务器)。这也是 docker
的一大特点,每个容器之间,环境都是隔离的。
我们甚至可以在一个服务器上,使用 docker
镜像,来跑出 n 个 mysql
实例。尽管它们的默认端口都是一样的,但容器间,环境是隔离的,A 容器的 3306 与 B 容器的 3306 毫无关系。
docker
的服务器)端口来直接访问容器的,因为 docker
容器自己开辟空间的端口与宿主机端口没有联系。redis
6379 端口绑定起来,那么再访问宿主机 ip:6379 就可以访问到对应容器了。-p 宿主机端口:容器端口
docker ps
# 或
docker container ls
docker ps -a
# -it:表示与容器进行交互式启动
# -d:表示可后台运行容器(守护式运行)
# --name:要给运行的容器起的名字
# /bin/bash:交互路径
docker run -it -d --name 要取的别名 镜像名:tag /bin/bash
举例:我们要启动一个 redis
,把它的别名取为 redis001
,并交互运行,命令如下(这里指定版本号为 5.0.5):
# 1. 拉取 redis 镜像
docker pull redis:5.0.5
# 2. 命令启动
docker run -it -d --name redis001 redis:5.0.5 /bin/bash
# 3. 查看已运行容器
docker ps
docker stop 容器名/容器ID
例如:停止之前运行的 redis
容器,就可以输入这样的命令:docker stop redis001
:
# 如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。
# 删除一个容器
docker rm -f 容器名/容器ID
#删除多个容器:空格隔开要删除的 容器名/容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
# 删除全部容器
docker rm -f $(docker ps -aq)
# 清除所有处于终止状态的容器
docker container prune
-p 宿主机端口:容器端口
举例:可以使用前面的 redis
镜像,尝试将 6379 端口映射到服务器的 8888,如果成功的话,那么访问服务器的 8888 端口,就会访问到 docker
中的容器 redis002
。可以输入下面这条命令:
docker run -itd --name redis002 -p 8888:6379 redis:5.0.5 /bin/bash
-p 8888:6379
解析:将容器内部的 6379 端口与 docker
宿主机(docker
安装在哪台服务器,哪台服务器就是宿主机)8888 端口进行映射,那通过外部访问宿主机 8888 端口,即可访问到 docker
容器 6379 端口了。# netstat 是控制命令,是一个监控 TCP/IP 网络的非常有用的工具,它可以显示路由器,实际的网络连接以及每一个网络接口设备的状态信息
netstat -untlp
redis002
容器绑定了,那么其它所有的容器都不可以使用 8888 这个端口了。# 只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然仍然可以返回。
# 当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
docker exec -it 容器名/容器ID /bin/bash
举例 1:
docker run -dit ubuntu
docker container ls
docker exec -i ddf bash
docker exec -it ddf bash
举例 2:进入前面的 redis001
容器,就可以输入命令 docker exec -it redis001 /bin/bash
。
可以看到,已经从主机 yangbaqiaun
跳到了容器 ID 对应下的 /data
,已经进入到容器内部了。
docker attach 容器名/容器ID
举例:
docker run -dit ubuntu
docker container ls
docker attach 12e
exec
方式。# 1. 直接退出:未添加-d(持久化运行容器)时,执行此参数容器会被关闭
exit
# 2. 无论是否添加 -d 参数,执行此命令,容器都不会被关闭
从键盘按下:Ctrl + p + q
docker start 容器名/容器ID
docker restart 容器名/容器ID
docker kill 容器名/容器ID
docker cp 容器ID/名称:文件路径 要拷贝到外部的路径 | 要拷贝到外部的路径 容器ID/名称:文件路径
# 从容器内拷出
docker cp 容器ID/名称:容器内路径 容器外路径
# 从外部拷贝文件到容器内
docker cp 容器外路径 容器ID/名称:容器内路径
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
docker run
命令时,添加参数 --restart=always
便表示该容器随 docker
服务启动而自动启动。docker run -itd --name redis002 -p 8888:6379 --restart=always redis:5.0.5 /bin/bash
防止数据丢失的两种方法:
-v 宿主机文件存储位置:容器内文件位置
如此操作,就将容器内指定文件挂载到了宿主机对应位置,-v
命令可以多次使用,即一个容器可以同时挂载多个文件。
-v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置 -v 宿主机文件存储位置:容器内文件位置
举例:
# 运行一个 docker redis 容器 进行 端口映射 两个数据卷挂载 设置开机自启动
docker run -d -p 6379:6379 --name redis505 --restart=always -v /var/lib/redis/data/:/data -v /var/lib/redis/conf/:/usr/local/etc/redis/redis.conf redis:5.0.5 --requirepass "password"
docker update --restart=always 容器Id/容器名
# 或
docker container update --restart=always 容器Id/容器名
docker rename 容器ID/容器名 新容器名
如果要导出本地某个容器,可以使用 docker export
命令。
举例:
docker container ls -a
docker export ddfc038b5dc2 > ubuntu.tar
这样将导出容器快照到本地文件。
可以使用 docker import
从容器快照文件中再导入为镜像。
举例:
cat ubuntu.tar | docker import - test/ubuntu:v1.0
docker image ls
此外,也可以通过指定 URL 或者某个目录来导入,例如
docker import http://example.com/exampleimage.tgz example/imagerepo
注:用户既可以使用 docker load
来导入镜像存储文件到本地镜像库,也可以使用 docker import
来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
# 从容器里面拷文件到宿主机
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
举例:docker cp project:/opt/cdc.txt /home/
# 从宿主机拷文件到容器里面
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
举例:docker cp /home/ccc.txt project:/opt/
【注意】:不管容器有没有启动,拷贝命令都会生效。如果拷贝的内容有重复,会直接覆盖,不会询问。
另一种:
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# option:-L,保持源目标中的链接
/.
结尾,源目录复制到此目录;SRC_PATH 以 /.
结尾,源目录的内容被复制到该目录中。