Docker 1.0(入门篇)

1. Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
1.1 基本组成
Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
1.2 帮助文档
2. Docker的安装
2.1 环境准备:
我这里使用一台阿里云的服务器(CentOS-7)
命令:
uname -r #查看系统内核版本
cat /etc/os-release #查看系统信息
示例:
[root@flamingo ~]# uname -r
3.10.0-1127.19.1.el7.x86_64
[root@flamingo ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
2.2 卸载旧版本:
旧版本的 Docker 被称为docker或docker-engine. 如果安装了这些,请卸载它们以及相关的依赖项
命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
实例:
[root@flamingo ~]# sudo yum remove docker \
> docker-client \
> docker-client-latest \
> docker-common \
> docker-latest \
> docker-latest-logrotate \
> docker-logrotate \
> docker-engine
Loaded plugins: fastestmirror
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal
2.3 安装依赖
yum install -y yum-utils
2.4 设置镜像仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo #国外的地址
# 设置阿里云的Docker镜像仓库
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.5 更新yum软件包
yum makecache fast
2.6 配置阿里云镜像加速
进去阿里云官网,搜索-容器镜像服务>镜像工具>镜像加速器:

在服务器上设置:
# 购买服务器都会给的有,每个人的都不相同,仅自己服务器使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6rbao01n.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.7 下载docker
yum install docker-ce docker-ce-cli containerd.io # 安装社区版
yum install docker-ee docker-ee-cli containerd.io # 安装企业版
一般情况下安装社区版

2.8 启动Docker
命令:
systemctl start docker # 启动Docker
docker version # 查看当前版本号,是否启动成功
systemctl enable docker # 设置开机自启动
示例:

2.9 Docker的卸载
yum remove docker-ce docker-ce-cli containerd.io # 卸载依赖
rm -rf /var/lib/docker # 删除资源 . /var/lib/docker是docker的默认工作路径
3. Docker实践
3.1 HelloWorld
docker run hello-world
示例:
[root@flamingo ~]# docker run hello-world # 运行hello-world
Unable to find image 'hello-world:latest' locally # 本地没有找到镜像
latest: Pulling from library/hello-world # 从库中拉取
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest
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/
3.2 运行centos容器
docker pull centos # 拉取镜像
docker run -it centos /bin/bash # 运行容器 -it 交互模式
示例:
[root@flamingo ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@flamingo ~]# docker run -it centos /bin/bash
[root@6106df527758 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
4. Docker常用命令
4.1 基础命令
docker version #查看docker的版本信息
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令(可查看可选的参数)
docker COMMAND --help
命令的帮助文档地址: https://docs.docker.com/engine/reference/commandline/docker/
4.2 镜像命令
查看镜像:
docker images # 查看本地主机的所有镜像
示例:
[root@flamingo ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
centos latest 5d0da3dc9764 6 months ago 231MB
1.REPOSITORY 镜像的仓库源
2.TAG 镜像的标签
3.IMAGE ID 镜像的id
4.CREATED 镜像的创建时间
5.SIZE 镜像的大小
# 可选参数
-a/--all 列出所有镜像
-q/--quiet 只显示镜像的id
搜索镜像:
docker search 镜像名 # 搜索相应的镜像文件
示例:
[root@flamingo ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12306 [OK]
mariadb MariaDB Server is a high performing open sou… 4734 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 913
percona Percona Server is a fork of the MySQL relati… 572 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 481 [OK]
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 93
centos/mysql-57-centos7 MySQL 5.7 SQL database server 92
bitnami/mysql Bitnami MySQL Docker Image 67
可选项:
--filter=STARS=3000 #搜索收藏数大于3000的镜像
拉取镜像:
docker pull 镜像名 # 拉取相应的镜像
示例:
[root@flamingo ~]# docker pull mysql
Using default tag: latest #如果不写tag默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载,docker image的核心-联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #下载来源的真实地址 #docker pull mysql等价于docker pull docker.io/library/mysql:latest
docker pull mysql[:tag] # 指定版本下载
示例:
docker pull mysql:5.7
`tag`一定要在docker-hub中存在

删除镜像:
#1.删除指定的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id
#2.删除多个镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f 镜像id 镜像id 镜像id
#3.删除全部的镜像id
[root@iZwz99sm8v95sckz8bd2c4Z ~]# docker rmi -f $(docker images -aq)
4.3 容器命令
运行容器:
docker run [可选参数] image
#参数说明
--name="名字" # 指定容器名字
-d # 后台方式运行
-it # 使用交互方式运行,进入容器查看内容
-p # 指定容器的端口
{
-p ip:主机端口:容器端口 # 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
-P # 随机指定端口(大写的P)
}
示例:
运行并进入容器centos
[root@flamingo ~]# docker run -it centos /bin/bash
[root@4564e6cc011e /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
退出容器:
exit # 停止并退出容器(后台方式运行则仅退出)
Ctrl+P+Q # 不停止容器退出
列出容器:
docker ps # 列出当前正在运行的容器
参数:
-a # 列出所有容器的运行记录
-n=? # 显示最近创建的n个容器
-q # 只显示容器的编号
示例:
[root@flamingo ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
81696953bd1e centos "/bin/bash" 31 seconds ago Up 30 seconds gifted_rosalind
[root@flamingo ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
81696953bd1e centos "/bin/bash" 33 seconds ago Up 32 seconds gifted_rosalind
4564e6cc011e centos "/bin/bash" 4 minutes ago Exited (0) 2 minutes ago relaxed_rosalind
6106df527758 centos "/bin/bash" About an hour ago Exited (1) 42 minutes ago priceless_haibt
f287c079ec37 feb5d9fea6a5 "/hello" About an hour ago Exited (0) About an hour ago friendly_wilson
7a3ef9da95ac hello-world "/hello" 2 hours ago Exited (0) 2 hours ago happy_kepler
c6374a6122f3 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago naughty_sammet
删除容器:
docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器
启动和停止容器:
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
2022-3-25 22:27
4.4 其他命令
查看容器日志:
docker logs --help
示例:
[root@flamingo ~]# docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
-n, --tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37Z) or relative (e.g. 42m for 42 minutes)
常用:
docker logs -tf 容器id
docker logs --tail number 容器id #num为要显示的日志条数
查看容器中进程信息:
[root@flamingo ~]# docker top 9fd26d483ed5
UID PID PPID C STIME TTY TIME CMD
root 32108 32089 0 10:28 pts/0 00:00:00 /bin/bash
root 32164 32089 0 10:28 ? 00:00:00 /bin/bash
查看容器的元数据:
docker inspect 容器id
示例:
[root@flamingo ~]# docker inspect 9fd26d483ed5
[
{
"Id": "9fd26d483ed55ab7414cda953bf0f977b4b01df359504661f1820a316c91c859",
"Created": "2022-03-25T14:54:12.312672252Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 32108,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-03-26T02:28:28.42231243Z",
"FinishedAt": "2022-03-25T14:55:13.54192648Z"
},
进入当前运行的容器:
docker exec # 进入容器后开启一个新的终端,可以在里面操作,(exit不会关闭容器)
docker attach # 进入容器正在执行的终端,不会启动新的进程
示例:
1. `docker exec -it 容器id /bin/bash`
[root@flamingo ~]# docker exec -it 9fd26d483ed5 /bin/bash
[root@9fd26d483ed5 /]#
2. `docker attach 容器id`
[root@flamingo ~]# docker attach 9fd26d483ed5
[root@9fd26d483ed5 /]#
拷贝命令:
#拷贝容器的文件到主机中
docker cp 容器id:容器内路径 目的主机路径
#拷贝宿主机的文件到容器中 (和容器的状态无关,未运行也可以拷贝)
docker cp 目的主机路径 容器id:容器内路径
示例:
将主机中的a.txt文件拷贝到 centos 容器的tmp目录下
[root@flamingo ~]# docker cp ./a.txt 9fd26d483ed5:/tmp/
将容器中的test.sh文件拷贝到主机当前目录
[root@flamingo ~]# docker cp 9fd26d483ed5:/root/test.sh ./
4.5 命令总结:
attach Attach to a running container #当前shell下attach连接指定运行镜像
build Build an image from a Dockerfile #通过Dockerfile定制镜像
commit Create a new image from a container's changes #提交当前容器为新的镜像
cp Copy files/folders from a container to a HOSTDIR or to STDOUT #从容器中拷贝指定文件或者目录到宿主机中
create Create a new container #创建一个新的容器,同run 但不启动容器
diff Inspect changes on a container's filesystem #查看docker容器变化
events Get real time events from the server#从docker服务获取容器实时事件
exec Run a command in a running container#在已存在的容器上运行命令
export Export a container's filesystem as a tar archive #导出容器的内容流作为一个tar归档文件(对应import)
history Show the history of an image #展示一个镜像形成历史
images List images #列出系统当前镜像
import Import the contents from a tarball to create a filesystem image #从tar包中的内容创建一个新的文件系统映像(对应export)
info Display system-wide information #显示系统相关信息
inspect Return low-level information on a container or image #查看容器详细信息
kill Kill a running container #kill指定docker容器
load Load an image from a tar archive or STDIN #从一个tar包中加载一个镜像(对应save)
login Register or log in to a Docker registry#注册或者登陆一个docker源服务器
logout Log out from a Docker registry #从当前Docker registry退出
logs Fetch the logs of a container #输出当前容器日志信息
pause Pause all processes within a container#暂停容器
port List port mappings or a specific mapping for the CONTAINER #查看映射端口对应的容器内部源端口
ps List containers #列出容器列表
pull Pull an image or a repository from a registry #从docker镜像源服务器拉取指定镜像或者库镜像
push Push an image or a repository to a registry #推送指定镜像或者库镜像至docker源服务器
rename Rename a container #重命名容器
restart Restart a running container #重启运行的容器
rm Remove one or more containers #移除一个或者多个容器
rmi Remove one or more images #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run Run a command in a new container #创建一个新的容器并运行一个命令
save Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search Search the Docker Hub for images #在docker-hub中搜索镜像
start Start one or more stopped containers#启动容器
stats Display a live stream of container(s) resource usage statistics #统计容器使用资源
stop Stop a running container #停止容器
tag Tag an image into a repository #给源中镜像打标签
top Display the running processes of a container #查看容器中运行的进程信息
unpause Unpause all processes within a container #取消暂停容器
version Show the Docker version information#查看容器版本号
wait Block until a container stops, then print its exit code #截取容器停止时的退出状态值
5. Docker可视化管理
主要有三种可视化工具:
- dockerUI
- portainer
- portainer
portainer工具的使:
[root@flamingo ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
94cfa856b2b1: Pull complete
49d59ee0881a: Pull complete
a2300fd28637: Pull complete
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for portainer/portainer:latest
1e4a4f2ac1a118af850abc8bfea229252bca5207fa4afb6fadf848ab7ea81926
直接访问主机相应的服务端口: http://116.62.141.109:8088/



6. 常见容器的部署
6.1 Nginx
docker search nginx # 查找
docker pull nginx # 下载
docker run -d --name nginx -p 9000:80 nginx # 启动
# 备注
-d 后台运行
--name 给容器命名
-p 9000:80 将宿主机的端口9000映射到该容器的80端口
示例:
[root@flamingo ~]# docker search nginx
[root@flamingo ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete
a9edb18cadd1: Pull complete
589b7251471a: Pull complete
186b1aaa4aa6: Pull complete
b4df32aa5a72: Pull complete
a0bcbecc962e: Pull complete
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@flamingo ~]# docker run -d --name=nginx -p 8080:80 nginx
访问nginx服务:http://116.62.141.109:8080/

6.2 Tomcat
docker search tomcat # 寻找镜像
docker pull tomcat # 拉取镜像
docker run -d --name=tomcat -p 8000:8080 tomcat # 启动容器
示例:
[root@flamingo ~]# docker search tomcat
[root@flamingo ~]# docker pull tomcat:9.0
9.0: Pulling from library/tomcat
0e29546d541c: Pull complete
9b829c73b52b: Pull complete
cb5b7ae36172: Pull complete
6494e4811622: Pull complete
668f6fcc5fa5: Pull complete
dc120c3e0290: Pull complete
8f7c0eebb7b1: Pull complete
77b694f83996: Pull complete
7662046c36cb: Pull complete
b93639122cb4: Pull complete
Digest: sha256:cd96d4f7d3f5fc4d3bc1622ec678207087b8215d55021a607ecaefba80b403ea
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0
[root@flamingo ~]# docker run -d --name tomacat -p 8000:8080 tomcat:9.0
06fdc4abc2db1e255ecb217b825a2b1ba3772a2373b0059a821dce42a695bec9
通过浏览器访问tomcat服务:http://116.62.141.109:8000/

扩展:
正常访问tomcat是可以看见他的logo界面。到那时在容器中tomcat是"青春版",不过通过相应的设置也能访问到logo界面:
[root@flamingo ~]# docker exec -it tomacat /bin/bash
root@06fdc4abc2db:~# cd /usr/local/tomcat/
root@06fdc4abc2db:/usr/local/tomcat# cp -r ./webapps.dist/* ./webapps/
再次访问:http://116.62.141.109:8000/ 就可以看见tomcat logo界面。

掌握了以上基本操作,可以继续学习Docker(进阶篇)


浙公网安备 33010602011771号