Docker常用命令

Docker简介

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。

在这里插入图片描述

Docker核心概念

在这里插入图片描述

docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);

docker客户端(Client):连接docker主机进行操作;

docker仓库(Registry):用来保存各种打包好的软件镜像;

docker镜像(Images):软件打包好的镜像;放在docker仓库中;

docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用.

安装Docker

安装Docker

yum install -y docker

启动Docker

systemctl start docker

开启开机启动

systemctl enable docker

systemctl enable docker --now

查看Docker信息

docker info

查看docker版本

sudo docker version

更换镜像源
docker 工作的基础即是镜像。您可以认为一个镜像即是一个独立的由应用组成的虚拟机。为此,docker 建立了docker hub来存贮镜像(就像GitHub一样)。但是由于网络原因, docker hub 的访问速度过慢,推荐您更换为国内的镜像源地址。

# vi /etc/docker/daemon.json
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
systemctl restart docker.service
sudo su -
cat >> /etc/docker/daemon.json <<- EOF
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
systemctl restart docker
exit

安装镜像

搜索镜像
推荐去 https://hub.docker.com/

docker search 关键字  
docker search redis

拉取镜像
:tag是可选的,tag表示标签,多为软件的版本,默认是latest

docker pull 镜像名:tag

docker pull redis:latest

查看所有本地镜像

docker images 
sudo docker image ls

删除镜像

docker rmi image-id 

启动容器

sudo docker run --rm -d -p 80:80 --name nginx nginx:alpine

–rm:表示这个容器执行完后会被直接销毁。
–name:指定这个容器的名称。
-d:表示这个容器会在后台运行。
-p:表示开放容器的80端口到主机的80端口。 主机:容器
-v:表示将nginx的配置文件挂载到容器的对应目录下。

在这里插入图片描述

查看所有的容器

docker ps ‐a

停止一个容器
您随时可以使用sudo docker stop <容器ID 或 容器名称>来停止一个容器

sudo docker stop nginx

安装 docker-compose
docker-compose 是 docker 的多个服务部署工具,以方便地同时启动多个容器。
您可以使用以下命令方便地安装它。

sudo apt-get install -y python-pip && sudo pip install docker-compose

报错 Error response from daemon: Error running deviceCreate (createSnapDevice) dm_task_run failed 解决方法
方法1

[root@a~]# systemctl stop docker.service   |  service docker stop

[root@a~]# thin_check /var/lib/docker/devicemapper/devicemapper/metadata 

[root@a~]# thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata 

[root@a~]# systemctl start docker.service  |  service docker start

方法2

systemctl stop docker.service 
mv /var/lib/docker/ /var/lib/docker.backup
systemctl start docker.service

修改容器内容

例如我们现在安装了Nginx,现在想修改默认的index.html 页面
1、进容器内部修改
进入容器内部的系统,修改容器内容
通过该命令可进入该容器,里面如同一个小型Linux环境。

docker exec -it 容器id  /bin/bash

2、挂载数据到外部修改

docker run --name=mynginx   \
-d  --restart=always \
-p  88:80 -v /data/html:/usr/share/nginx/html:ro  \
nginx

-v指的是挂载,将容器的/usr/share/nginx/html挂载到主机的/data/html(后面挂到前面),ro:只读模式

修改页面只需要去 主机的 /data/html,也可以挂载配置的文件,因为在ngnix镜像内修改不方便,可能没有vim命令,所以挂载到主机环境,就能方便的修改。

3、或者手动复制

# 将主机的文件复制到容器中
docker cp [OPTIONS] SRC_ PATH CONTAINER:DEST_PATH

# 将容器中的文件复制到主机
docker cp [OPTIONS] CONTAINER:SRC_ PATH DEST_ PATH

挂载

将主机的某个目录跟容器的目录关联起来,修改主机目录就相当于修改容器目录,示例见上面 2、挂载数据到外部修改
在这里插入图片描述

提交-保存镜像

1、将自己修改好的镜像提交,下次崩了还可以安装同样配置的。类似git commit

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit -a "leifengyang"  -m "首页变化" 341d81f7504f guignginx:v1.0

2、将本地镜像保存为文件,安装到其它主机

# 将镜像保存成压缩包,将abc.tar传给其它主机
docker save -o abc.tar guignginx:v1.0

# 别的机器加载这个镜像 离线安装
docker load -i abc.tar

3、推送远程仓库
推送镜像到docker hub;应用市场

docker network

查看 docker network
在这里插入图片描述

查看容器IP

cat /etc/hosts
docker inspect <container id>
或者
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container id>
要获取所有容器名称及其IP地址只需一个命令。

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

docker查看容器IP的方法
https://blog.csdn.net/koonsuen/article/details/105785380

容器之间互访

Docker容器之间互访
https://blog.csdn.net/lcgskycby/article/details/108586358

docker compose

安装
https://docs.docker.com/compose/install/

常用命令
在这里插入图片描述

docker-compose.yml 配置文件编写详解
https://blog.csdn.net/qq_36148847/article/details/79427878

进阶实战:Java应用

1、编写一个HelloWorld应用 https://start.spring.io/

示例代码: https://gitee.com/leifengyang/java-demo.git

配置redis

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

#redis使用自定义配置文件启动

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

最终应用界面:写一个Controller模拟网页访问次数,数据值保存在redis中。

2、将应用打包成镜像
以前:Java为例 ● SpringBoot打包成可执行jar ● 把jar包上传给服务 ● 服务器运行java -jar

编写Dockerfile将自己的应用打包镜像

FROM openjdk:8-jdk-slim
LABEL maintainer=leifengyang

COPY target/*.jar /app.jar

ENTRYPOINT ["java","-jar","/app.jar"]
  • openjdk:8-jdk-slim可以从dockerhub搜到

  • /app.jar是指小型linux
    在这里插入图片描述

之后执行

docker build -t java-demo:v1.0 .

-t 后面跟的是要打包成的镜像名字
不要忘记最后的点

启动容器

docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 

分享镜像供其他机器使用

# 登录docker hub
docker login

#给旧镜像起名
docker tag java-demo:v1.0  leifengyang/java-demo:v1.0

# 推送到docker hub
docker push leifengyang/java-demo:v1.0

# 别的机器
docker pull leifengyang/java-demo:v1.0

# 别的机器运行
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0 

安装MySQL示例

docker pull mysql
https://hub.docker.com/

docker images 

docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d  mysql

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

进入mysql容器,并登陆mysql

[root@VM-6-143-centos ~]# docker exec -it mysql bash
root@157b4be75770:/# mysql -uroot -p

参考
https://www.cnblogs.com/jiefu/p/12204555.html

下面代码有问题

# 把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面 改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)   
docker run ‐‐name mysql03 ‐v /conf/mysql:/etc/mysql/conf.d ‐e MYSQL_ROOT_PASSWORD=my‐secret‐pw  ‐d mysql:tag 

# 指定mysql的一些配置参数
docker run -itd --name some‐mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character‐setserver=utf8mb4 --collation-server=utf8mb4_unicode_ci 

部署前后端分离项目

Docker部署前后端分离项目(超详细)个人总结
https://blog.csdn.net/qq_45743005/article/details/119922465

更多命令参考

https://docs.docker.com/engine/reference/commandline/docker/

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值