1 docker 运行一个nginx的容器服务
1.1 [root@localhost ~]# docker rmi -f $(docker images -aq) 删除掉所有docker下的镜像
1.2 [root@localhost ~]# docker pull nginx 下载docker的镜像
1.3 [root@localhost ~]# docker search nginx 查看关于nginx的镜像 默认会下载官方下载最多的
2 上传nignx的软件包进行导入称为镜像在运行
[root@localhost ~]# docker load < nginx-1.19.tar 将nginx软件包使用docker load < 进行导入
[root@localhost ~]# docker images 查询nginx的相关镜像
[root@localhost ~]# docker run --name webserver -d -p 80:80 nginx 运行nginx容器的服务
61e482a0fe3fb282e80d4bbdb5b7d85744e829a250b2ff9ec45691ddd261fe9c 容器的ID号
-- name 给容器起名字 -d 后台运行 -p 80:80将宿主机的端口与容器的端口产生一个映射 nginx 指定镜像
补充:如果直接使用docker run 跑容器的话会去docker上下载镜像
[root@localhost ~]# docker ps #查看docker运行中的容器
因为在虚拟机上产生的端口映射 虚拟机的虚拟层与底层操作系统通信。所有通信

3 docker 运行一个Mysql数据库的容器应用服务。
3.1 可以使用docker pull 下载官方的镜像
3.2 上传软件包在则进行导入
[root@localhost ~]# docker load < mysql_5.6.tar 导入成为镜像
[root@localhost ~]# docker run --name mysql -d -p 3306:3306 -e MYSQL\_ROOT\_PASSWORD=123456 mysql:5.6 指定运行 -e 编辑模式给mysql的ROOT用户设置密码
63281914f5feef25b9a516d305261bc54a9c732923cd3b63c96cc7fa43a91463
出现的问题 docker 运行状态的问题。
eb6490c88848 mysql:5.6 "docker-entrypoint.s…" 4 seconds ago Exited (127) 3 seconds ago mymysql
解决问题
1.1 检查docker run 运行的命令是否输入正确 检查该给的选项对应的给到容器了吗 检查是否有端口占用的情况
[root@localhost ~]# docker ps ps 是查看docker运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63281914f5fe mysql:5.6 "docker-entrypoint.s…" 2 seconds ago Up 1 second 0.0.0.0:3306->3306/tcp mysql
61e482a0fe3f nginx "/docker-entrypoint.…" 20 minutes ago Up 20 minutes 0.0.0.0:80->80/tcp webserver
[root@localhost ~]# docker rm -f eb64 删除容器可以直接输入docker容器的前几个ID号即可
eb64
4 docker 运行一个Redis数据库的容器应用服务。
docker run -d -p 6379:6379 redis:latest docker run本地没有镜像会自动到docker的官方仓库中拉取
省略的步骤
1 docker search redis 查看redisimages的下载热点
2 docker pull redis:标签
[root@localhost ~]# docker images 查看pull下来的镜像
[root@localhost ~]# docker run -d -p 6379:6379 redis:latest 运行容器
20fd300b9eb40285d38d5c74866b46de95f2b143c6aa9e45252201dafdf1f638
所有端口映射的端口都需要借用docker的proxy进程
[root@localhost ~]# netstat -lnpt | grep 6379
tcp6 0 0 :::6379 :::* LISTEN 75894/docker-proxy
docker run的参数
-
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-
-d: 后台运行容器,并返回容器ID;
-
-i: 以交互模式运行容器,通常与 -t 同时使用;
-
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-
--name="nginx-lb": 为容器指定一个名称;
-
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
-
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-
-h "mars": 指定容器的hostname;
-
-e username="ritchie": 设置环境变量;
-
--env-file=[]: 从指定文件读入环境变量;
-
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-
-m :设置容器使用内存最大值;
-
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;
-
--link=[]: 添加链接到另一个容器;
-
--expose=[]: 开放一个端口或一组端口;
-
--volume , -v: 绑定一个卷
如果重启容器后所有运行的容器状态会变成exited
systemctl restart docker
systemctl daemon-reload
再 次进入容器中会出现错误
[root@localhost ~]# docker exec -it 61e482a0fe3f bash
Error response from daemon: Container 61e482a0fe3fb282e80d4bbdb5b7d85744e829a250b2ff9ec45691ddd261fe9c is not running
守护进程没有响应 docker容器实际上就是一个单一的可分配的进程,docker所有的进程通过daemon去守护以及管理docker容器运行
[root@localhost ~]# docker ps -a 查看所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fd300b9eb4 redis:alpine "docker-entrypoint.s…" 20 minutes ago Exited (0) 10 minutes ago vigorous_payne
63281914f5fe mysql:5.6 "docker-entrypoint.s…" 22 minutes ago Exited (0) 10 minutes ago mysql
[root@localhost ~]# docker start 20fd start 指定准备运行的容器 个人感觉就是加入到docker daemon进程中再去管理
20fd
永久解决的办法
1 将docker 使用systemctl enable docker 设置开机自启
2 在运行docker容器时也可以指定它
具体操作为:使用在Docker run的时候使用–restart参数来设置。
no - container:不重启
on-failure - container:退出状态非0时重启
always:始终重启
5 如何进入容器
docker exec -it 61e482a0fe3f /bin/bash 指定Docker容器的ID号 /bin/bash 进入容器中
docker attach + 容器的ID 退出后容器会停止
6 删除重启容器
docker stop $(docker ps -aq)
重启所有容器
docker restart $(docker ps -aq)
.Docker镜像的目录结构
[root@localhost ~]# ll /var/lib/docker/
总用量 4
drwx------. 2 root root 24 11月 1 13:48 builder
drwx--x--x. 4 root root 92 11月 1 13:48 buildkit
drwx------. 5 root root 222 11月 2 09:58 containers
drwx--x--x. 14 root root 182 10月 29 17:53 docker
drwx------. 3 root root 22 11月 1 13:48 image
drwxr-x---. 3 root root 19 11月 1 13:48 network
drwx------. 15 root root 4096 11月 2 09:58 overlay2
drwx------. 4 root root 32 11月 1 13:48 plugins
drwx------. 2 root root 6 11月 1 13:48 runtimes
drwx------. 2 root root 6 11月 1 13:48 swarm
drwx------. 2 root root 6 11月 2 10:00 tmp
drwx------. 2 root root 6 11月 1 13:48 trust
drwx------. 2 root root 25 11月 1 13:48 volumes
1 builder目录
builder就是用来构建的目录,其中的fscache.db是用来在构建镜像时缓存数据的,也就是缓存了相关镜像的数据,从而大大提高了创建镜像的速度,可以在底层的基础之上构建更高层的镜像。
2 containerd目录
containerd的主要职责是镜像管理(镜像、元信息等)、容器运行(调用最终运行时组件运行),该目录存放着containerd相关信息。
3 containers目录
主要用来存储创建容器的内容。每次新建一个容器会在此目录下产生一个容器ID的文件
4 image目录
image目录主要用来存储镜像的相关分配、分布、imagedb、layerdb、repositories等信息。信息大部分都是sha256加密形式的。当我们使用docker images命令显示镜像的时候,其实读取的就是这个目录的信息。
5 network目录
network目录主要用来存储网络相关的信息,创建容器的时候,如果用到了网络,就会更新network目录的信息。
6 overlay2目录
overlay2是一种存储驱动,从Docker 1.12开始推出,相较overlay的实现有重大提升。此目录主要用来存储镜像,所有的镜像都会存储在这个位置,包括base image或者是在其上的image。所以我们下载的镜像是存储在overlay2目录,这个目录是镜像存储非常重要的目录,如果你的镜像很多,这个文件夹也是会很大的。
7 plugins目录
Docker 1.13开始提供插件化管理,这样能快速利用插件的可扩展性。Docker的任务是让所有插件都像容器一样被管理和运行,把Docker Hub作为集中资源,让插件更好用,从而推动过程标准化。这个目录就是存取相关插件信息的目录。
8 runtimes目录
这是Docker运行时信息存放目录。
9 swarm目录
swarm是Docker的集群管理工具,存放的是swarm相关文件的信息,如果没装swarm,那么swarm目录里面是空的。
10 tmp目录
Docker的临时目录。
11 trust目录
Docker的信任目录。
12 volumes目录
volumes目录是Docker中数据持久化的最佳方式,默认在主机上会有一个特定的区域(/var/lib/docker/volumes/),该区域用来存放volume。volume在生成的时候如果不指定名称,便会随机生成。所以,这个目录下的名字都是随机的ID。
修改docker镜像的默认路径
$ systemctl stop docker 停止docker
然后,把/var/lib/docker全部移动到空间足够大的目录里,比如放到/data/docker下。接下来再用ln-s命令创建一个软连接指向/var/lib/docker。最后再启动docker服务,命令如下。
$ mv /var/lib/docker /data/docker
$ ln -s /data/docker /var/lib/docker 注意/号
$ systemctl start docker
导出导入镜像
docker save 镜像ID > ./nginx.tar
docker load < ./docker.tar 包 将tar包进行导入成为镜像。
docker export 1abb5356102b > ./nginx-images.tar 将运行的容器导出来成为镜像 再使用load解压 使用与dockerfile
使用commit构建镜像
[root@localhost ~]# docker ps docker ps 查看运行中的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1abb5356102b nginx "/docker-entrypoint.…" 25 hours ago Up 25 hours 0.0.0.0:80->80/tcp webserver
[root@localhost ~]# docker commit --author "boweniqu" --message "做了什么操作" webserver nginx:v3
sha256:34e7b1b37feebc43f4457855ea57b0041bb6b240b23a211d1f08dcc68d483939
●--author “bowenqiu”:注明镜像作者。
●--message“修改了默认网页”:注明这个镜像做了什么修改。
●webserver:指定对哪个运行的容器做commit操作。
●nginx:v3:生成后的镜像名和版本号。
指定docker file文件
浙公网安备 33010602011771号