docker的基础使用命令

一、安装

安装官网:https://docs.docker.com/engine/install/centos/

1、卸载docker

yum remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine

2、安装yum工具包以及配置yum源

# 工具包
yum install -y yum-utils
# 配置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker

yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

问题:Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 14] curl#7 - “Failed to connect to 2a03:2880:f12a:83:face:b00c:0:25de: Network is unreachable”
服务器下载docker的镜像仓库失败,切换成阿里云的镜像下载

解决方法:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、启动docker

systemctl start docker

5、运行镜像

docker run hello-world

6、配置镜像加速(腾讯云为例)

(1)创建json配置文件

vim /etc/docker/daemon.json

(2)添加配置到daemon.json中

{
   "registry-mirrors": [
   "https://mirror.ccs.tencentyun.com"
  ]
}

(3)重启docker

systemctl restart docker

(4)查看信息

docker info

二、docker安装mysql

运行命令

docker run -d \
	--name mysql \
	-p 3306:3306 \
	-e TZ=Asia/Shanghai \
	-e MYSQL_ROOT_PASSWORD=123456 \
	mysql

三、命令解读

例子

docker run -d \
	--name mysql \
	-p 3306:3306 \
	-e TZ=Asia/Shanghai \
	-e MYSQL_ROOT_PASSWORD=123456 \
	mysql

docker run :创建并运行一个容器

-d : 让容器在后台运行

–name :给容器定义一个名字,必须唯一

-p 3306:3306 : 设置端口映射 (第一个端口是宿主机端口,第二个端口是容器内端口)

-e KEY=VALUE :设置环境变量(key和value形式配置)

mysql : 最后一个是镜像名字,标准写法是 repositiry:tag ( 名字:版本)

四、常见命令

在这里插入图片描述

1、拉取镜像

docker pull

2、查看本地镜像

docker images

3、删除镜像

docker rmi -f 镜像名称:版本号

4、保存镜像到本地(以nginx镜像为例子)

docker save -o nginx.tar nginx:latest

docker save -o "镜像打包名称".格式 "所要打包的镜像名":"版本号"

5、加载镜像

docker load -i "镜像名称"."格式"

6、创建并运行容器

docker run -d --name nginx2 -p 81:80 nginx

docker run -d --name "镜像名称" -p "宿主机端口":"容器端口" "容器名称"

7、启动和停止容器运行

# 开始
docker start "容器名称"
# 停止
docker stop "容器名称"

8、查看日志

docker logs "容器名"

docker logs -f "容器名" # 在控制台持续输出

9、进入容器内部

# -it表示添加一个可输入终端   交互方式:bash 表示用命令行交互
docker exec -it "容器名" "交互方式"
# 退出方式
exit

10、删除容器

# -f 表示强制删除
docker rm -f "容器名"

11、查看容器

# -a 表示查看所有的容器,不添加只可以查看当前正在运行中的容器
docker ps -a

五、数据卷

1、挂载数据卷

(1)、在容器创建并执行的时候就将数据卷进行挂在

docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx

docker run -d --name nginx -p 80:80 -v "数据卷名称":"容器内对应的目录" nginx

(2)、查看宿主机的数据卷

docker volume ls

(3)、查看数据卷的具体信息

docker volume inspect "数据卷"

(4)、删除数据卷

docker volume rm "数据卷名称"

(5)、清除数据卷

docker volume prune

2、本地目录挂载

提示:

  • 在执行docker run 命令时,使用 -v 本地目录:容器内目录 可以完成本地目录挂载
  • 本地目录必须以 “/” 或者 “./” 开头,如果直接以名称开头,会被识别为数据卷而非本地本地目录
    • -v mysql:/var/lib/mysql 会被识别为一个数据卷叫做mysql
    • -v ./mysql:/var/lib/mysql 会被识别为在当前目录下的mysql目录

以mysql为例,需要查阅mysql的镜像中,对应配置在容器内的挂载目录

mysql镜像地址:https://hub.docker.com/_/mysql

初始脚本挂载地址:

/docker-entrypoint-initdb.d

配置地址:

/etc/mysql/conf.d

数据地址:

/var/lib/mysql

(1)、在docker run 命令中进行挂载

docker run -d \
	--name mysql \
	-p 3306:3306 \
	-e TZ=Asia/Shanghai \
	-e MYSQL_ROOT_PASSWORD=123456 \
	-v /var/local/mysql/data:/var/lib/mysql \ # 数据库挂载
	-v /var/local/mysql/conf:/etc/mysql/conf.d \ # 配置文件挂载
	-v /var/local/mysql/init:/docker-entrypoint-initdb.d \ # 初始化脚本挂载
	mysql

注意:

如果需要在创建容器时就让配置文件生效,让脚本运行,则需要先创建本地目录的脚本与配置文件

脚本示例:

CREATE DATABASE IF NOT EXISTS docker_test;
USE docker_test;

CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com');
INSERT INTO users (username, email) VALUES ('user2', 'user2@example.com');

配置文件示例:

[mysqld]
# 设置3306端口
port=3306
 
# 允许最大连接数
max_connections=100
 
# 服务端使用的字符集默认为UTF8MB4
character-set-server=utf8mb4
 
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
 
# 设置SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 
[mysql]
# 设置客户端默认字符集
default-character-set=utf8mb4
 
[client]
# 设置客户端连接服务端时默认使用的端口和字符集
port=3306
default-character-set=utf8mb4

(2)、查看是否已经创建成功进入本地目录 /var/local/mysql/data,查看data目录是否生成表和执行初始化的数据表

六、DockerFile文件

Dockerfile基础指令

指令说明示例
FORM指定基础镜像FORM centos:6
ENV设置环境变量,可在后面指令使用ENV key value
COPY拷贝本地文件到镜像的指定目录COPY ./jre11.tar.gz /tmp
RUN执行linux的shell命令,一般是安装过程的命令RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path
EXPOSE指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar

七、自定义镜像

命令

docker build -t myImage:1.0 .

命令解析

  • -t : 给镜像起名,格式依然是 repository:tag的格式,不指定tag时。默认为latest(最新版本)
  • . : 是指定Dockerfile所在目录,如果就在当前目录,则指定为 “.

制作镜像

(1)、拉取openjdk8镜像

docker pull openjdk:8u121-jdk-alpine

(2)、准备一个demo的jar包

(3)、编写Dockerfile配置文件

# 基础镜像
FROM openjdk:8u121-jdk-alpine
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /tmp/app.jar
#开放端口
EXPOSE 9991
# 入口
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]

(4)、进入上传目录,执行制作镜像命令

docker build -t docker-demo .

(5)、运行镜像(自定义镜像)

第一个端口为宿主机端口,第二个端口为容器内端口

docker run -d --name dd -p 8080:9991 docker-demo

八、容器网络

在这里插入图片描述
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上

创建网络命令

命令说明地址文档
docker network create创建一个网络
docker network ls查看所有网络
docker network rm删除指定网络
docker network prune清除未使用网络
docker network connect使指定容器连接加入某网络
docker network discounect使指定容器连接离开某网络
docker network inspect查看网络详情信息

示例:

(1)创建一个网络

docker network create dockernettest # 创建一个名为dockernettest的网络

(2)将mysql连接到该网络中

网络名在前,容器名在后

docker network connect dockernettest mysql

(3)检查是否连接上,使用命令查看容器详情信息即可看到该网络

docker inspect mysql

九、DockerCompose

基础命令

docker compose [OPTIONS] [COMMAND]
类型参数或指令说明
options-f指定compose文件的路径和名称
-p指定project名称
commandsup创建并启动所有service容器
down停止并移除所有容器、网络
ps列出所有启动的容器
logs查看指定容器的日志
stop停止容器
start启动容器
restart重启容器
top查看运行进程
exec在指定的运行中容器中执行命令

安装docker-compose
下载安装包

curl -L https://get.daocloud.io/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

赋予权限

chmod a+x /usr/local/bin/docker-compose

查看版本

docker-compose --version

设置软链接

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

十、docker安装MongoDB

docker run --restart=always --name my-mongo -p 27018:27017 -v /app/docker-space/mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=1234567 -d mongo --auth

进入容器内部进行查询:

1、1、进入MongoDB容器中

sudo docker exec -it my-mongo bash

2、查询MongoDB的命令所在目录(容器中的目录)

whereis mongod

3、使用命令进入MongoDB

mongosh

4、切换数据库

use boatol;

5、验证数据库用户名密码权限(用户名和密码需要用双引号,单引号会验证不通过

db.auth("admin", "1234567");

6、以上步骤执行完后,可使用查询命令进行操作

systemctl daemon-reload
systemctl start docker.service

十一、自定义安装nginx

1、首先启动一个新的nginx容器

docker run -d --name nginx2 -p 80:80 nginx

2、将容器中的目录拷贝出来,方便挂载

docker cp mynginx:/etc/nginx /home/nginx
docker cp mynginx:/var/log/nginx /home/nginx/log
docker cp mynginx:/usr/share/nginx/html /home/nginx/html

3、删除容器,重新创建

4、注意点

  • 修改配置文件中的目录时,使用的是镜像地址,例如:/home/nginx/nginx.conf,那么在配置文件中应该是 /etc/nginx/nginx.conf
  • 在宿主机上的文件地址,nginx镜像使用时,因为已经挂载到了容器内,所以也要使用容器内的地址,不可直接使用宿主机上的目录地址

执行命令

docker run --name mynginx -p 80:80 -p 443:443 -v /home/nginx:/etc/nginx -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/log:/var/log/nginx -d nginx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值