Docker

本文最后更新于:4 个月前

Docker

Docker 容器入门 - 惨绿少年 - 博客园 (cnblogs.com)

一、Docker 安装

1
2
3
4
5
6
7
[root@iZ2zeb7ybli3zzdll6airpZ ~]# cat /etc/redhat-release 
CentOS Linux release 8.4.2105
[root@iZ2zeb7ybli3zzdll6airpZ ~]# uname -r
4.18.0-305.3.1.el8.x86_64
[root@iZ2zeb7ybli3zzdll6airpZ ~]# hostname -I
172.17.113.163 172.18.0.1
[root@iZ2zeb7ybli3zzdll6airpZ ~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
# 修改启动文件,监听远程端口
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://10.0.0.100:2375
systemctl daemon-reload

# 启动docker
systemctl start docker.service
# 开机自启
systemctl enable docker.service
# 重启
systemctl restart docker.service

# ps -ef检查进行,是否启动

配置docker镜像加速

1
2
3
4
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

二、Docker基础命令

Docker入门教程_docker菜鸟教程-CSDN博客

这应该是目前最好的 Docker 入门进阶教程(万字干货) - 知乎 (zhihu.com)

1. 帮助命令

1
2
3
4
5
6
7
docker -v	   # 显示docker的版本号

docker version # 显示docker的版本信息

docker info # 显示docker的系统信息,包括镜像和容器的数量

docker [COMMAND] --help # 帮助命令 (COMMAND,命令),例如 docker save --help

2. 镜像操作命令

镜像名称一般分两部分组成:[repository]:[tag]

  • 镜像名:版本, 例如:mysql:5.7。

docker_image

如果拉取镜像不指定版本,默认是latest,代表最新版本的镜像。(最好用具体版本的镜像,方便查看版本)

2.1 镜像常用命令:

  • 获取镜像:
    • 本地构建:docker bulid
    • 拉取镜像:docker pull 镜像名称
  • 查看镜像: docker images
  • 删除镜像: docker rmi 镜像名称或镜像id
  • 推送镜像: docker push 镜像名称
  • 导出镜像: docker save -o 文件名.tar 镜像名称
  • 加载镜像: docker load -i 文件名.tar
  • 加载镜像: docker load -i -q 文件名.tar (不输出日志)

3. 容器操作命令

容器保护三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源

容器常用命令:

  • docker run:创建并运行一个容器,处于运行状态。
    • docker run –name [容器名] -p 宿主机端口号:容器内部端口号 -d [镜像名称]
  • docker pause:让一个运行的容器暂停。
  • docker unpause:让一个容器从暂停状态恢复运行。
  • docker stop:停止一个运行的容器。
  • docker start:让一个停止的容器再次运行。
  • docker restart:重启容器。
  • docker rm:删除一个容器。
  • docker rm -f :强制删除容器。
  • docker rm -f $(docker ps -qa): 删除所有dokcer容器 (包括正在运行的和已停止的容器)
  • docker ps:查看正在运行的容器。
  • docker ps -a:查看所有容器。
  • docker logs 容器名 :查看容器日志。
  • docker logs -f 容器名 :持续查看容器日志。
  • 进入容器:docker exec -it 容器名 bash。(execute,执行)
  • 把容器设置开机自启:docker update --restart=always 容器名
  • 查询指定名称开头的容器id:docker ps -a -q --no-trunc --filter name=^/xxx 。(这里xxx表示容器开头名称)
  • 组合命令启动指定名称开头的容器:docker start docker ps -a -q --no-trunc --filter name=^/xxx

扩展:

1
2
3
4
5
6
7
docker run -it IMAGES_NAME  #会创建前台进程,但是会在输入exit后终止进程。

docker attach DOCKER_ID #会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.

docker exec -it DOCKER_ID /bin/bash #会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

#以上几种方式均可通过输入Ctrl+P+Q把前台容器放入后台运行,不终止进程。

示例练习

1、下载nginx镜像,创建并运行一个容器,容器名为nginx1

1
2
3
4
5
# 下载最新版的nginx
docker pull nginx

# 创建并运行一个容器,容器名为nginx1,对外提供的端口是800,容器内部端口是80, -d表示后台启动
docker run --name nginx1 -p 800:80 nginx
  • docker run :创建并运行一个容器。
  • –name : 给容器起一个名字,比如叫做nginx1。
  • -p :端口映射。
  • -d:后台运行容器。
  • nginx:镜像名称,例如nginx。

浏览器测试访问:http://192.168.112.129:800/

2、进入nginx1容器,修改nginx首页内容

1
docker exec -it nginx1 bash
  • docker exec :进入容器内部,执行一个命令。
  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互。
  • mn :要进入的容器的名称。
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令。

2.1 启动NGINX容器

1
2
3
4
5
6
7
8
9
10
[root@docker01 ~]# docker run -d -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
e7bb522d92ff: Pull complete
6edc05228666: Pull complete
cd866a17e81f: Pull complete
Digest: sha256:285b49d42c703fdf257d1e2422765c4ba9d3e37768d6ea83d7fe2043dad6e63d
Status: Downloaded newer image for nginx:latest
8d8f81da12b5c10af6ba1a5d07f4abc041cb95b01f3d632c3d638922800b0b4d
# 容器启动后,在浏览器进行访问测试

参数说明

参数 说明
run 创建并运行一个容器
-d 放入后台
-p 端口映射
nginx 镜像名称

查看当前主机镜像列表

1
2
3
4
[root@docker01 ~]# docker image list 
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB

2.2 导出镜像

1
2
3
4
5
6
[root@docker01 ~]# docker image list 
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
# 导出
[root@docker01 ~]# docker image save centos > docker-centos.tar.gz

3. 删除镜像

1
2
3
4
[root@docker01 ~]# docker image rm centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3f8a4339aadd 5 weeks ago 108MB

4. 导入镜像

1
2
3
4
5
6
7
[root@docker01 ~]# docker image load -i docker-centos.tar.gz  
e15afa4858b6: Loading layer 215.8MB/215.8MB
Loaded image: centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB

5. 查看镜像的详细信息

1
[root@docker01 ~]# docker image inspect centos

Docker
https://chris-z-su.github.io/2024/03/25/技术/docker/
作者
Chris
发布于
2024年3月25日
许可协议