Dokcer安装使用

本文最后更新于:2023年10月4日 晚上

docker 安装

centos7 下安装:yum install -y docker

运行 docker:systemctl start docker

开机启动:systemctl enable docker

查看 docker 状态:systemctl status docker

运行镜像:docker run hello-world

运行 nginx: docker run -d -p 80:80 nginx

docker 增

1.从 dockerhub 仓库中获取 docker 的镜像,从 github 获取代码一个道理

1
2
docker  pull centos  #去docker仓库中寻找centos系统镜像
docker pull ubuntu #获取ubuntu镜像

2.获取一个 hello-world 进程

1
docker  pull hello-world

3.获取一个 ubuntu 镜像

1
docker pull ubuntu

4.搜索相关的镜像

1
docker search  python3

docker 删

1.删除本地镜像文件

1
2
docker rmi   镜像id
docker rmi fce #删除镜像id的前3位即可,必须要先删除有相关依赖的容器进程记录

2.删除容器记录的命令

1
docker rm   容器id前3位

3.批量清空无用的 docker 容器记录,容器记录非常容易创建 docke run

1
2
#批量删除挂掉的容器记录
docker rm `docker ps -aq` # 把docker容器记录的id号,保存在反引号中,丢给docker rm实现批量删除

4.批量删除镜像

批量删除所有的镜像,但正在运行的镜像不能删除

1
docker rmi `docker iamges -aq`

5.批量停止容器

1
2
3
4
docker stop `docker ps -aq`
docker start 容器id #启动暂停的容器
docker stop 容器id #暂停一个容器
docker restart 容器id #重启容器

docker 改

1.运行第一个 docker 的容器实例,运行镜像文件,产生容器进程

1
2
3
docker run   镜像文件的名字即可
docker run centos #运行centos基础镜像,如果docker容器中没有在后台运行的进程,容器会直接挂掉
#如果你发现你的容器没有启动成功,说明容器内部出错了,程序没有运行

2.运行一个 hello world 容器进程

1
2
#如果本地有就直接运行,如果本地没有就远程pull在本地后在运行:1.下载镜像,2.执行镜像
docker run hello-world

3.交互式的运行一个存活的 docker 容器,centos

1
2
3
4
5
# -it参数  -i 是交互式的命令操作   -t开启一个终端   /bin/bash 指定shell解释器
# 容器空间内,有自己的文件系统
docker run -it centos /bin/bash #运行centos镜像,且进入容器内
[root@s25linux ~]# docker run -it centos /bin/bash #进入容器后,容器空间内是以容器id命名的
[root@fc760671d074 /]#

4.运行出一个活着的容器,在后台不断执行程序的容器

1
2
3
4
5
6
#  docker run  运行镜像文件
# -d 是让容器后台运行
# -c 指定一段shell代码

# 运行centos镜像,生成容器实例,且有一段shell代码,在后台不断运行,死循环打印一句话,每秒钟打印一次
docker run -d centos /bin/sh -c "while true;do echo s25的靓仔们辛苦了学习linux; sleep 1;done"

5.运行 docker 容器,且指定名字,便于管理

1
docker run --name "指定容器的运行名字“    -d centos /bin/sh -c "while true;do echo s25的靓仔们辛苦了学习linux; sleep 1;done"

6.进入一个正在运行的容器空间,进入一个线上正在运行的容器程序,修改其内部的资料

1
docker exec -it  容器id   /bin/bash

7.如何进入容器空间内,修改容器内的环境,以及代码等内容,修改软件等操作,且提交镜像,发送给其他人

1
2
3
4
5
6
7
8
9
7.1 进入容器空间内,安装一个vim或是python3等步骤
docker run -it centos /bin/bash
yum install vim -y

7.2 安装好vim后,退出容器空间
exit

7.3 提交该容器,生成新的镜像文件
docker commit 5b28d8c88794 s25-centos-vim

docker 查

1.查看本地机器,所有的镜像文件内容

1
docker  images

2.查看 docker 正在运行的进程

1
docker ps

3.查看所有运行,以及挂掉的容器进程

1
2
3
docker ps
#查看所有运行,以及挂掉的容器进程
docker ps -a

4.查看容器内的运行日志

1
2
docker logs  容器id
docker logs -f 容器id #实时刷新容器内的日志,例如检测nginx等日志信息

5.查看容器内的端口转发情况

1
2
3
docker port  容器id  #查看容器的端口转发
[root@s25linux ~]# docker port 615
5000/tcp -> 0.0.0.0:6000

运行容器

如何在 docker 内,运行一个 python web 的程序,需要用到端口映射知识~~~~

1
2
3
4
5
6
7
#  -d 后台运行
# -P 大写的P参数,作用是随机的端口映射
# training/webapp 是镜像的名字,默认没有会去在线下载
# python app.py 代表启动容器后,让容器执行的命令是它
# 因此这个命令作用是,启动一个webapp镜像,且在容器中执行 python app.py
# -p 6000:5000 访问宿主机的6000,就是访问容器的5000了
docker run --name "webdocker" -d -p 6000:5000 training/webapp python app.py

进入该 webapp 的容器,查看里面的内容

1
2
docker exec -it  容器id   /bin/bash  #进入容器内,可以进行相应的修改操作
docker restart 容器id #重启该容器,重新读取代码,即可生效

提交 docker 镜像

提交镜像

1
docker commit 282bb472351d my-centos

保存镜像

1
2
3
4
docker save  镜像id   >   镜像的压缩文件
#官方文档解释的是,docker save用的是tar命令压缩,应该是没有其他压缩格式的
[root@s25linux ~]# docker save 45d7f887125d > /opt/s25-centos-vim.tar.gz
#你可以删掉本地的镜像,然后重新导入该压缩文件,模拟发送给同事的操作

导入镜像

1
2
3
4
比如小李运维同志,他收到了该docker镜像压缩文件,在他的机器上导入该进项
docker load < /opt/s25-centos-vim.tar.gz
首次导入该进项的时候,发现丢失了镜像tag标签,重新赋予一个即可
docker tag 45d7f887125d s25-new-centos-vim

上传镜像

系统登录 docker

docker login

1
2
3
4
5
6
7
8
docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: pythl
Password:
Login Succeeded

Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/

dockerfile

Dockerfile常用指令学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# FROM 指令表示,告诉该dockerfile以哪个镜像为基础
# 比如你的技术老大,要求你们程序运行在ubuntu中
# FROM ubuntu
# FROM centos
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image


#LABEL标签,定义变量,定义坐着信息等
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“pythl@fomail.com"

#RUN是一个完成指令,你可以用它在docker中执行任意的命令
# RUN就是告诉容器要做哪些配置

# 用RUN指令告诉dockerfile他该去做什么事
RUN mkdir /pythl
RUN cd /pythl
RUN cd
RUN pwd #会输出什么? 因此在容器中会输出,用户家目录

#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
# 要修改centos基础镜像的环境问题
RUN yum update && yum install -y vim \
Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME

WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
RUN pwd #打印结果应该是/test/demo

#案例
WORKDIR /pythl
WORKDIR 我们要说goodbay了
RUN pwd #会输出什么? /s25很棒/我们要说goodbay了 此时进入了2层目录

# ADD指令用于添加宿主机的文件,放入到容器空间内
# 宿主机有自己的文件系统,文件夹,文件,目录等
# 容器内也有一套自己的文件系统,独立的文件信息
# 把宿主机的代码,拷贝到容器内
# ADD还有解压缩的功能,这是一个坑,需要注意
ADD and COPY
ADD hello.txt /opt #吧宿主机的hello.txt 拷贝到容器内的/opt目录下
ADD test.tar.gz /opt /opt/test
RUN tar -zxvf test.tar.gz #直接报错,文件不存在 ,因为上一步,ADD指令已经对tar.gz压缩包解压缩了

WORKDIR /root
ADD hello test/ #进入/root/ 添加hello可执行命令到test目录下,也就是/root/test/hello 一个绝对路径
COPY hello test/ #等同于上述ADD效果

# dockerfile,用于从宿主机拷贝文件,到容器内有2个指令一个ADD,一个COPY,COPY仅仅就是拷贝,尽量用它
ADD与COPY
- 优先使用COPY命令
-ADD除了COPY功能还有解压功能

#添加远程文件/目录使用curl或wget

ENV #环境变量,尽可能使用ENV增加可维护性
ENV MYSQL_VERSION 8.0
RUN yum install -y mysql-server=“${MYSQL_VERSION}

RUN yum install -y mysql-server=“${MYSQL_VERSION}
RUN yum install -y mysql-server=“${MYSQL_VERSION}
RUN yum install -y mysql-server=“${MYSQL_VERSION}
RUN yum install -y mysql-server=“${MYSQL_VERSION}
RUN yum install -y mysql-server=“${MYSQL_VERSION}
RUN yum install -y mysql-server=“${MYSQL_VERSION}

实战

1.准备好一个 flask 代码文件:s25_flask.py,检查需要哪些依赖步骤

1
2
3
4
5
6
7
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
return "linux就即将结束了,祝大家,找到好工作,有linux问题呢,尽量和我来沟通,互相学习"
if __name__=="__main__":
app.run(host='0.0.0.0',port=8080)

2.新建一个容器

1
➜  s25 docker run -it centos  /bin/bash

3.容器安装 python

1
2
3
docker run python -it /bin/bash #生成一个带python环境的容器
#进入容器
➜ s25 docker exec -it 12c /bin/bash

dockerhub

1.docker提供了一个类似于 github 的仓库dockerhub网址需要注册使用 2.注册docker id后,在 linux 中登录dockerhub docker login

注意要保证 image 的 tag 是账户名,如果镜像名字不对,需要改一下 tag

docker tag 镜像 dockerhub帐号名/centos-vim

1
2
3
4
5
➜  ~ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: xxx
Password:
Login Succeeded

3.推送 docker image 到 dockerhub

1
docker push yuchao163/centos-vim

4.在dockerhub中检查镜像https://hub.docker.com/ 5.删除本地镜像,测试下载pull镜像文件

1
docker pull pythl/centos-vim

docker 常见报错

centos 设置源

yum install 报错

在 2022 年 1 月 31 日,CentOS 团队终于从官方镜像中移除 CentOS 8 的所有包。

CentOS 8 已于 2021 年 12 月 31 日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org

报错如下:

1
2
3
4
5
[root@6482683a6a60 /]# yum install -y wget
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream 75 B/s | 38 B 00:00
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

进入到 yum 的 repos 目录

1
cd /etc/yum.repos.d/

修改 centos 文件内容

1
2
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

生成缓存更新(第一次更新,速度稍微有点慢,耐心等待两分钟左右)

1
yum makecache

运行 yum update 并重新安装 vim

1
2
yum update -y
yum -y install vim

debian 设置源

apt-get 下载报错

设置国内源

1
sed -i 's#http://deb.debian.org#https://mirrors.163.com#g' /etc/apt/sources.list

更新源

1
apt-get update

安装软件

1
apt-get install -y vim

ubuntu

apt 下载报错

1
2
3
4
5
root@0ea113202112:/# apt install vim
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package vim

设置国内源

1
sed -i 's#http://deb.debian.org#https://mirrors.163.com#g' /etc/apt/sources.list

更新源

1
apt update

安装软件

1
apt install -y vim


Dokcer安装使用
https://pythl.com/archives/3d3f37ff.html
作者
晚生隆海
发布于
2019年11月23日
更新于
2023年10月4日
许可协议