Docker
1.Docker的安装
在Linux(CentOS)系统中输入,
国外源:
curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun
国内源:
curl -sSL https://get.daocloud.io/docker | sh
卸载Docker
卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
删除安装包:
yum remove docker-ce
删除镜像、容器、配置文件
rm -rf /var/lib/docker
检测Docker是否安装成功
通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。
docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
则安装成功
2.Docker的使用
启动Docker的服务:
第一次使用Docker要启动docker的服务
[root@admin ~]# service docker start
关闭环境以后重新使用
[root@admin ~]# service docker restart
Docker允许在容器内运行应用程序
使用docker run
命令在容器中运行一个程序
docker run ubuntu:15.10 /bin/echo "Hello world"
- docker:Docker的二进制执行文件
- run:与docker组合来运行一个容器
- ubuntu:15.10:指定要运行的镜像,Docker会先在本地找镜像是否存在;不存在则会到Docker Hub上下载公共镜像
2.1 进入到Docker的容器里(交互模式)
docker run -i -t ubuntu:15.10 /bin/bash
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
2.2 启动Docker容器
命令:
[root@admin ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
eff4eff9cc18b009463c60d56bddd5505530767e4fa1c6c1e123894acd5f89b4
设置一个无限循环的每隔1s输出hello world
因为是后台运行所以无法看见hello world
eff4eff9cc18b009463c60d56bddd5505530767e4fa1c6c1e123894acd5f89b4
这一大串数字为容器ID
docker ps:查看当前创建的容器
参数:
-a:查看所有容器,包括停止的
-l:展示最后创建的容器
[root@admin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eff4eff9cc18 ubuntu:15.10 "/bin/sh -c 'while t…" 57 seconds ago Up 56 seconds romantic_elbakyan
查看容器内的标准输出
命令:docker logs 容器ID
docker logs eff4ef
只用输入部分ID
停止正在运行的容器
命令:docker stop 容器ID
[root@admin ~]# docker stop eff4
eff4
[root@admin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3. Docker的常用命令
3.1 帮助命令
docker version
:查看docker的版本信息
root@admin ~]# docker version
Client: Docker Engine - Community
Version: 20.10.8
API version: 1.41
Go version: go1.16.6
Git commit: 3967b7d
Built: Fri Jul 30 19:55:49 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
docker info
:显示docker系统信息,包括镜像和容器数量
GitCommit: de40ad0
[root@admin ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)
Server:
Containers: 5
Running: 0
Paused: 0
Stopped: 5
Images: 2
Containers:5 (代表当前由5个容器)
Images:2(代表当前由2个镜像)
docker --help
Docker的帮助命令
3.2 镜像命令
docker images
列出本地主机上的镜像
参数:
-a:列出本地所有的镜像
-q:只显示镜像的ID
–digests:显示镜像的摘要信息
–no-trunc:显示完整的镜像信息
示例:
相关参数
REPOSITORY:表示仓库源
TAG:镜像的版本标签
IMAGE ID:镜像的ID
CREATED:创建时间
VIRTUAL SIZE:大小
[root@admin ~]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 months ago 13.3kB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
[root@admin ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 months ago 13.3kB
ubuntu 15.10 9b9cb95443b5 5 years ago 137MB
docker search 镜像名
从仓库中搜索指定镜像
参数说明:
-s n(n是数字):列出收藏不少于n的镜像
–no-trunc:显示完整镜像
–automate:只列出automate build的镜像
示例:
STARS:收藏数量
[root@admin ~]# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementati… 3089 [OK]
tomee Apache TomEE is an all-Apache Java EE certif… 91 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base… 57 [OK]
kubeguide/tomcat-app Tomcat image for Chapter 1 30
consol/tomcat-7.0 Tomcat 7.0.57, 8080, "admin/admin" 18 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 15 [OK]
aallam/tomcat-mysql Debian, Oracle JDK, Tomcat & MySQL 13 [OK]
arm32v7/tomcat Apache Tomcat is an open source implementati… 11
andreptb/tomcat Debian Jessie based image with Apache Tomcat… 10 [OK]
rightctrl/tomcat CentOS , Oracle Java, tomcat application ssl… 6 [OK]
unidata/tomcat-docker Security-hardened Tomcat Docker container. 5 [OK]
arm64v8/tomcat Apache Tomcat is an open source implementati… 4
amd64/tomcat Apache Tomcat is an open source implementati… 3
jelastic/tomcat An image of the Tomcat Java application serv… 2
cfje/tomcat-resource Tomcat Concourse Resource 2
oobsri/tomcat8 Testing CI Jobs with different names. 2
fabric8/tomcat-8 Fabric8 Tomcat 8 Image 2 [OK]
camptocamp/tomcat-logback Docker image for tomcat with logback integra… 1 [OK]
chenyufeng/tomcat-centos tomcat基于centos6的镜像 1 [OK]
99taxis/tomcat7 Tomcat7 1 [OK]
ppc64le/tomcat Apache Tomcat is an open source implementati… 1
picoded/tomcat7 tomcat7 with jre8 and MANAGER_USER / MANAGER… 1 [OK]
s390x/tomcat Apache Tomcat is an open source implementati… 0
softwareplant/tomcat Tomcat images for jira-cloud testing 0 [OK]
secoresearch/tomcat-varnish Tomcat and Varnish 5.0 0 [OK]
-
docker rmi -f 镜像ID
删除镜像 -
docker pull
下载镜像
示例:下载tomcat
3.3 容器命令
注:有镜像才能创建容器
1.docker run [option] image [command]
新建并启动容器
主要语法:docker run
option:可以使用的参数
image:使用的镜像名
command:在容器内执行的命令
参数说明:
举例:
docker run -it centos /bin/bash
使用镜像centos创建并以交互模式启动一个容器,在容器内执行/bin/bash指令
option相关参数:
–name=“容器新名字”,为容器指定一个名称
-d:后台运行容器,并返回容器ID,也为启动容器
-i:以交互模式运行容器,与-t
使用
-t:为容器重新分配一个伪输入终端,通常与-i
使用
2.docker ps
列出当前所有正在运行的容器
-a:列出所有运行的容器,包括历史上运行过的
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:只显示容器编号
-no-trunc:不截断输出
3.退出当前使用的容器
前提:使用docker run -it以交互模式启动一个容器
[root@admin ~]# docker run -it centos /bin/bash
进入到容器内:
[root@29970373d52f /]#
退出方法一: exit
直接退出并且暂停容器
退出方法二:ctrl+p+q
保存后退出容器
4.容器的启动暂停命令:
- 启动容器:
docker start 容器ID或者容器名
- 重启容器:
docker restart 容器ID或者容器名
- 停止容器:
docker stop 容器ID或者容器名
- 强制停止容器:
docker kill 容器ID或者容器名
举例:
现在29970的容器处于暂停状态
[root@admin ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29970373d52f centos "/bin/bash" 27 minutes ago Exited (0) 6 seconds ago
启动29970的容器:
[root@admin ~]# docker start 29970
29970
[root@admin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29970373d52f centos "/bin/bash" 29 minutes ago Up 8 seconds angry_morse
5.删除已经暂停的容器:
- 删除单个容器:
docker rm 容器ID
- 删除多个容器:
docker rm -f $(docker ps -a -q)
[root@admin ~]# docker rm 29970
29970
3.4进入容器:
使用了 docker run -d 参数时,容器会自动进入后台,可以通过以下命令进入:
- docker attach:使用命令会直接进入容器,并显示容器执行过程
退出后,会暂停容器
举例:
[root@admin ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
fe3866b023d1b716b5bf51a2ff7e5f5c259f7ad81acfa23d027ce1af5f69b366
[root@admin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe3866b023d1 ubuntu:15.10 "/bin/sh -c 'while t…" 55 seconds ago Up 54 seconds zealous_sammet
[root@admin ~]# docker attach fe3866
hello world
hello world
hello world
^C[root@admin ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- docker exec:使用命令会以交互模式进入容器,并且退出时不会暂停容器
docker exec -it 容器ID /bin/bash
4.导出和导入容器
导出容器
创建容器的快照,保存当前容器的运行状态
[root@admin hellos]# docker export fe3866 > /hello/hellos/ubuntu.tar
[root@admin hellos]# ll
总用量 121672
drwxr-xr-x. 2 root haoming 6 8月 13 09:08 helloworld
-rwxr-xr-x. 1 root root 43 8月 13 10:01 test.sh
-rw-r--r--. 1 root root 124584448 8月 13 15:25 ubuntu.tar
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
cat docker/ubuntu.tar | docker import - test/ubuntu:v1
5.运行一个Web应用
载入一个Web镜像:
docker pull training/webapp
在docker容器中运行一个 Python Flask 应用来运行一个web应用。
docker run -d -P training/webapp python app.py
使用 docker ps 来查看我们正在运行的容器:
runoob@runoob:~# docker ps
CONTAINER ID IMAGE COMMAND ... PORTS
d3d5e39ed9d3 training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp
多了端口信息
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。
可以在浏览器中输入本机地址+端口查看