docker容器的简单使用

本文详细介绍了在CentOS8系统上安装Docker的步骤,包括查看系统环境、卸载旧版本、设置镜像仓库、安装最新版Docker、启动Docker、测试运行Hello World镜像以及管理Docker镜像和容器的各种命令。此外,还提到了Docker镜像的分层存储、数据卷的使用以及Dockerfile的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker

安装Docker

先查看自己系统的环境:我用的是centos 8

环境查看
[root@iZ2zedsctsh21tlseacu5lZ /]# uname -r
4.18.0-147.5.1.el8_1.x86_64
系统版本
[root@iZ2zedsctsh21tlseacu5lZ /]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2、需要地安装包
yum install -y yum-utils
3、设置镜像的仓库
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    //https://download.docker.com/linux/centos/docker-ce.repo
4、更新yum软件索引
yum makecache fast
5、安装最新版本的docker
yum install docker-ce docker-ce-cli containerd.io
6、启动docker
systemctl start docker
7、查看docker
docker version
8、测试hello world
docker run hello-world
9、查看一下下载的hello world的镜像
docker images
9、卸载docker
yum remove docker-ce docker-ce-cli containerd.io
删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

# 重载所有修改过的配置搵件

sudo systemctl daemon-reload

# 重启Docker服务

sudo systemctl restart docker

Docker的常用命令

在这里插入图片描述

docker images --help docker的帮助命令

docker镜像命令

docker images 查看所有本地主机上的镜像

[root@iZ2zedsctsh21tlseacu5lZ lib]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   3 months ago   13.3kB

REPOSITORY:镜像的仓库名称
TAG:版本
IMAGE ID:镜像的id
# -a 列出所有镜像
# -q 只显示镜像的id

docker的搜索命令

docker search MySQL

[root@iZ2zedsctsh21tlseacu5lZ lib]# docker search MySQL
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation??  10984     [OK]       
mariadb                           MariaDB Server is a high performing open sou??  4152      [OK]  
# --filters=stars=3000 搜索大于3000的

docker下载镜像

docker pull mysql 默认是下载最新的版本

[root@iZ2zedsctsh21tlseacu5lZ lib]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
69692152171a: Pull complete 
1651b0be3df3: Pull complete 
951da7386bc8: Pull complete 
0f86c95aa242: Pull complete 
37ba2d8bd4fe: Pull complete 
6d278bb05e94: Pull complete 
497efbd93a3e: Pull complete 
f7fddf10c2c2: Pull complete 
# docker pull mysql:5.7指定版本下载

docker rmi 删除镜像

docker rmi -f [容器的id] #根据容器id删除镜像
docker rmi -f [容器的id] [容器id] #批量的删除镜像
docker rmi -f $(docker images -aq)#删除全部的镜像

docker容器命令

1、容器的启动命令

docker run …

docker run mysql #启动MySQL

#参数说明
--name="mysql"      容器名字,用来区分容器
-d					后台方式运行,容器使用后台运行,需要有一个前台应用,但这个命令不会开启前台命令,所以通过 docker ps 查找时,发现应用并没有启动
-it					使用交互方式运行,进入容器查看内容
-p					指定容器的端口 -p 8080

#测试						   服务器端口  docker容器
docker run -d --name myMsql -p 3306:3306 将Tomcat后台启动并自定义名字,并将容器中的3306端口映射到服务器上的3306端口

# 测试,启动并进入容器
docker run -it mysql /bin/bash
ls  #查看容器内的MySQL
exit # 退出容器并停止容器
Ctrl + P + q 容器不停止退出

Options:
      --add-host list                  Add a custom host-to-IP mapping (host:ip)
  -a, --attach list                    Attach to STDIN, STDOUT or STDERR
      --blkio-weight uint16            Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)
      --blkio-weight-device list       Block IO weight (relative device weight) (default [])
      --cap-add list                   Add Linux capabilities
      --cap-drop list                  Drop Linux capabilities
      --cgroup-parent string           Optional parent cgroup for the container
      ........

2、列出所有运行的容器

//配置MySQL,并将容器中MySQL中的一些文件映射到服务器上,方便修改
docker run -d --name mysql -p 39001:3306\
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7

docker ps

docker ps -a 列出当前+曾经运行的容器

3、删除容器

docker rm [容器id]

docker rm $(docker ps -aq) 删除所有的容器

4、容器的启动和停止操作

docker start [CONTAINER ID] 启动容器

docker stop [容器id] 停止容器

docker restart [容器id] 重新启动容器

docker kill [容器id] 直接杀死容器

其他常用命令

1、查看日志: docker logs [OPTIONS] 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)

2、查看容器中的进程信息

docker top 容器id

[root@iZ2zedsctsh21tlseacu5lZ ~]# docker top 67f6fabe53ce
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                16705               16684               1                   21:35               pts/0               00:00:00            /bin/bash

3、查看镜像的元数据

docker inspect 容器ID

4、进入当前正在运行的容器

//docker exec -it [容器id] bashShell

docker exec -it [容器id] /bin/bash 进入容器后会开启一个新的终端 docker exec -it mysql /bin/sh

docker exec -it redis redis-cli 使用redis镜像执行redis-cli连接

docker attach [容器id] 进入容器正在执行的终端

5、从容器内拷贝文件到主机

docker cp [容器id]:容器内路径 目标主机路径

6、查看docker的内存消耗

docker stats

镜像概述

docker run -p 6379:6379 --name redis
-v /mydata/redis/data:/data
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf
-d redis redis-server /etc/redis/redis.conf

镜像:镜像(Mirroring)是一种文件存储形式,是冗余的一种类型,一个[磁盘]上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。可以把许多文件做成一个镜像文件。我们可以将jar包,及运行该jar包所需要的环境一起打包docker镜像,可以一键部署。

联合文件系统

联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。
联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

另外,不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。

docker镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

**bootfs(boot file system)**主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的, 包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs(root file system), 在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

提交自己的镜像

docker commit -a=“作者” -m=“提交的信息” [要提交的容器的id] [目标镜像名:版本]

docker容器卷

简介

卷的设计目的就是数据的持久化和同步,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

挂载卷到主机上

方式一:将卷挂载到主机上,容器中的操作会自动同步到主机中

docker run -it -v [主机目录:容器目录]

docker run -it -v /home/test:/home mysql /bin/bash

#启动MySQL并将卷挂载,还需要设置MySQL的登录密码 -e
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

具名挂载和匿名挂载

#匿名挂载 挂载到容器内路径
docker run --name some-mysql -v etc/mysql/conf.d
docker run --name some-mysql -v etc/mysql/conf.d:ro #添加readonly权限
#查看volume的情况
docker volume ls
#查看卷的具体信息
docker volume inspect [custom]
#具名挂载 挂载到指定主机
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d

2、使用dockfile来进行挂载卷的操作

#--volumes-from用来联通两个容器
docker run -it --name myMysql --volumes-from /etc/mysql

dockerFile

Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。

docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。

dockerfile常用指令

#例如:
# Base images 基础镜像
FROM centos

#MAINTAINER 维护者信息
MAINTAINER zcc 

#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH

#ADD  文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/  
ADD epel-release-latest-7.noarch.rpm /usr/local/  

#RUN 执行以下命令 
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www

#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0 

RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install

RUN echo "daemon off;" >> /etc/nginx.conf

#EXPOSE 映射端口
EXPOSE 80

#CMD 运行以下命令
CMD ["nginx"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值