others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

dokcer入门

访问量:2343 创建时间:2022-10-31

本文案例环境在centos7.9系统下操作

docker安装

依赖包安装

yum install -y yum-utils device-mapper-persistent-data lvm2

添加yum源,(docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品;docker-ee是docker公司维护的闭源产品,是docker公司的商业产品;docker-ce project是docker公司维护,docker-ee是闭源的;要使用免费的docker,从网页docker-ce上获取;要使用收费的docker,从网页docker-ee上获取。)

[root@localhost ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

安装docker

[root@localhost ~]# yum install -y docker-ce

[root@localhost ~]# docker -v
Docker version 20.10.21, build baeda1f

配置

[root@localhost ~]# mkdir /etc/docker 
[root@localhost ~]# cat >> /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
[root@localhost ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

docker服务管理基本命令

#启动/关闭/重启docker服务
systemctl start/stop/restart docker
#设置开机启动docker服务
systemctl enable docker
#取消开机启动docker服务
systemctl disable docker
#查看是否开机自启(enable:开启,disable:关闭)
systemctl list-unit-files | grep docker

docker命令

镜像操作

#查看镜像:本地有哪些镜像
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
#搜索镜像:从网络中搜索可用的镜像
[root@localhost ~]# docker search ${imgname}
#拉取镜像:从Docker仓库下载镜像
#docker pull 镜像名称
#docker pull 镜像名称:版本

#删除镜像:删除本地的镜像
#docker rmi 镜像名称
#docker rmi 镜像名称:版本

案例

###拉去redis镜像
[root@localhost ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
e9995326b091: Pull complete 
f2cd78d6f24c: Pull complete 
8f3614d34c89: Pull complete 
697fd51ec515: Pull complete 
a554cf50a327: Pull complete 
66f93c02e79c: Pull complete 
Digest: sha256:aeed51f49a6331df0cb2c1039ae3d1d70d882be3f48bde75cd240452a2348e88
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
#查看本地镜像
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        latest    c2342258f8ca   5 days ago   117MB
##拉取特定版本
[root@localhost ~]# docker pull redis:5.0
5.0: Pulling from library/redis
e9995326b091: Already exists 
f2cd78d6f24c: Already exists 
8f3614d34c89: Already exists 
a9c5d537deea: Pull complete 
82aa9c8f3f00: Pull complete 
6453e701d8ee: Pull complete 
Digest: sha256:c7092cb213ccc98f8ccb1c5b479a3535c4d6f51ef6f3748934749575cf24f170
Status: Downloaded newer image for redis:5.0
docker.io/library/redis:5.0
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        5.0       61807950b074   5 days ago   110MB
redis        latest    c2342258f8ca   5 days ago   117MB

####删除镜像
[root@localhost ~]# docker rmi redis:5.0
Untagged: redis:5.0
Untagged: redis@sha256:c7092cb213ccc98f8ccb1c5b479a3535c4d6f51ef6f3748934749575cf24f170
Deleted: sha256:61807950b07480dc8135587b51b9d1d6d9c77353ee9410fa2a67337291f3e346
Deleted: sha256:e2d2d66623af5caae3c8eabaa19e4666afa9ae46ecf5ba3ef26137f4fc3f5e5d
Deleted: sha256:f3e9c35f9395810b96df18682d3a231ec48fe32073988c8fd132e0f93187964f
Deleted: sha256:03ac96f2326352294ab318d8cb3493251aaafb5c224e4676821c776c8357f1e3
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        latest    c2342258f8ca   5 days ago   117MB

容器运行相关命令

容器就是镜像物理文件运行出来的实例,镜像和容器可以理解为"软件"的两种不同状态。

#查看运行中的容器
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS  
#-a:查看所有容器(默认只显示运行中的容器)
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS 

#(创建容器)运行镜像
[root@localhost ~]# docker run -id --name=c1 redis
ec585168de5cd0b56766bb1df927cd0874dc8dc6b50e33893d5584863c6893aa
#-i:保持容器运行
#-d:守护模式(创建的容器在后台运行)
#-t:分配一个伪终端,通常与-i同时使用
#–name:为创建的容器命名
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS      NAMES
ec585168de5c   redis     "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp   c1
#进入容器
[root@localhost ~]# docker exec -it c1 bash
root@ec585168de5c:/data# 
#退出容器
root@ec585168de5c:/data# exit
exit

##停止容器
[root@localhost ~]# docker stop c1
c1
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS                     PORTS     NAMES
ec585168de5c   redis     "docker-entrypoint.s…"   5 minutes ago   Exited (0) 2 seconds ago             c1

##查看容器信息
[root@localhost ~]# docker inspect c1
##删除容器
[root@localhost ~]# docker rm c1
mysql
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

数据持久化

容器数据持久化:即使容器被删除,宿主机中仍然可以保留容器中的数据, 外部机器和容器通信:Docker容器采用沙箱机制隔离,无法直接与外部机器交换文件,配置数据卷后,可以将文件放到宿主机的映射目录下,然后自动同步到容器中。

#创建容器时,使用 -v 参数 配置数据卷
#docker run -id --name=c1 -v 宿主机目录:容器内目录 redis bash
#目录必须是绝对路径
#如果目录不存在,会自动创建
# 1、创建redis容器,把容器的/root/data目录映射到宿主机的/root/data目录
docker run -id --name=c1 -v /root/data:/root/data redis bash
# 2、在宿主机的映射目录中,创建文件 a.txt
touch /root/data/a.txt
# 3、查看宿主机的文件是否创建成功
ls /root/data
# 4、进入redis容器(根据容器名c1)
docker exec -it c1 bash
# 5、查看容器的映射目录中,是否同步创建了文件a.txt
ls /root/data

docker部署mysql

[root@localhost ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
d67a603b911a: Pull complete 
0cf69c8f1492: Pull complete 
a5ee239a0d3a: Pull complete 
0f166cb3e327: Pull complete 
882d294bf188: Pull complete 
2649fc7eb806: Pull complete 
bddb3394e2e3: Pull complete 
93c83d9a2206: Pull complete 
99d7f45787c0: Pull complete 
234663a2e3ee: Pull complete 
74531487bb7b: Pull complete 
Digest: sha256:d4055451e7f42869e64089a60d1abc9e66eccde2910629f0dd666b53a5f230d8
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

###创建MySQL容器
[root@localhost ~]# docker run -id -p 3306:3306 --name=mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
#参数说明:
#\(反斜杠):用于换行,增加代码可读性
#-p 3306:3306:将容器的3306端口(右)映射到宿主机的3306端口(左)
#-v /root/mysql/conf:/etc/mysql/conf.d:映射配置目录
#-v /root/mysql/logs:/logs:映射日志目录
#-v /root/mysql/data:/var/lib/mysql:映射数据目录
#-e MYSQL_ROOT_PASSWORD=123456:初始化root密码

###进入容器登录mysql
[root@localhost ~]# docker exec -it mysql bash
bash-4.4# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

参考文档:https://blog.csdn.net/wangyuxiang946/article/details/127432218

登陆评论: 使用GITHUB登陆