常用命令

参考菜鸟教程 docker命令大全
https://www.runoob.com/docker/docker-command-manual.html

查看镜像

  1. docker images

拉取镜像

值得一提的是 这个openjdk:8-jdk-alpine镜像比的java:8镜像要轻量得多 只有100多M
更适合用来发布自己的springboot项目镜像

  1. docker pull openjdk:8-jdk-alpine

根据镜像ID删除镜像

docker rmi [IMAGE ID]
#或者
docker image rm [IMAGE ID]

查看容器

-a 表示所有容器 -l 表示上一次运行的容器 -q则返回当前运行的所有容器ID

docker ps (-a|-l|-q)

根据容器ID删除容器

docker rm [CONTAINER ID]

根据镜像运行容器 及参数使用

-d表示在后台运行容器

docker run -d centos

-i 表示交互 -t表示登录终端

docker run -it centos

-p 对外暴露的主机端口:docker容器端口 两个端口可以一致

-P 随机分配端口

docker run -it -p 8888:8080 tomcat

运行容器并给容器取一个别名

以centos容器为例 给容器取一个别名叫 mycentos

docker run -it --name mycentos centos

登录了centos容器后想要退出容器 输入 exit 即可,容器就会关闭

但如果只想暂时退出一下 需要按键盘的组合键位 ctrl+p+q 但容器不会关闭 还在继续运行

特权用户运行容器

进入容器可以做任何事,一般不推荐 这样不太安全

docker run -it --name mycentos centos --privileged

暂时退出后再进入后台运行的容器

docker attach [CONTAINER ID|NAMES]

还有一种进入容器的命令 tomcat别名mytomcat 此命令可以对tomcat的目录进行操作

docker exec -it mytomcat /bin/bash

启动容器 通过容器ID或者别名

docker start [CONTAINER ID|NAMES]

重启容器

docker restart [CONTAINER ID|NAMES]

停止容器

docker stop [CONTAINER ID|NAMES]

更新参数

docker update --restart=always mysql57

强制停止容器

docker kill [CONTAINER ID|NAMES]

查看容器内部消息

docker inspect [CONTAINER ID|NAMES]

将主机上的文件像容器里copy

当前目录下的test.txt文件 拷贝到mycentos容器的root目录下

docker cp ./test.txt mycentos:/root/

反过来就是容器复制到主机

docker cp mycentos:/root/ /root/test.txt

将容器转为镜像

commit命令

该命令用来将docker容器转变成镜像

-a表示作者,-m标准信息,然后接上当前运行的容器ID或别名,yudi/tomcat:0.0.1 表示要提交的包名和版本号

docker commit -a="yudi" -m="test" [CONTAINER ID|NAMES] yudi/tomcat:0.0.1

save命令

将新的镜像压缩

docker save -o 压缩文件名称 镜像名称:版本号

load命令

将压缩文件转成镜像

docker load -i 压缩文件名称

容器与主机的数据共享和对接 -v参数

docker run -it -v [宿主机绝对路径]:[容器绝对路径]:ro [镜像名称]

如果加了:ro 则只能在容器里进行读写 宿主机不可以读写

以centos为例,如果没有文件夹会创建 —privileged=true则是给权限

docker run -it -v /root/myData:/root/dataVolumeContainer centos (--privileged=true)

启动容器时定义环境变量-e参数

docker run \
 --name mysql57 \
 -p 3306:3306 \
 -e MYSQL_ROOT_PASSWORD=1234 \
 -d mysql:5.7.30 --default-authentication-plugin=mysql_native_password

dockerfile创建docker镜像

-f 指明DockerFile文件路径 -t命名空间 .指当前目录下

这里dockerFile文件内的代码为 FROM是基于某镜像 VOLUME可创建容器卷 这里创建了两个

FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "success !!!"
CMD /bin/bash

创建docker镜像的命令如下

docker build -f ./dockerFile -t yang/centos .

创建数据卷容器

-v 后面的参数只设一个绝对路径,这就是数据卷容器了,可以被其他容器继承此数据卷

docker run -it --name dc03 -v /valume yang/centos

创建容器并继承容器的数据卷

根据别名来继承

docker run -it --name dc02 --volumes-from dc01 yang/centos

私有仓库的操作

搭建

搭建私有仓库就是使用registry容器,先拉取然后启动容器
在浏览器中输入http://ip:5000/v2/_catalog,看到{"repositories":[]}则表示创建成功

docker pull registry
docker run -id --name registry -p 5000:5000 registry

然后需要在 /etc/docker/daemon.json 中添加 “insecure-registries”:[“私有仓库ip:5000”]
registry-mirrors是之前配置好的阿里云的加速器,配置完了之后需要重启docker服务——systemctl restart docker

{
  "registry-mirrors": ["https://wpmi553t.mirror.aliyuncs.com"],
  "insecure-registries":["http://192.168.101.45:5000"]
}

上传镜像

以centos:7容器为例,上传完成后就可以在http://ip:5000/v2/_catalog网址中看到相应的容器名了

# 1、标记镜像为私有仓库的镜像     
docker tag centos:7 私有仓库服务器IP:5000/centos:7

# 2、上传标记的镜像     
docker push 私有仓库服务器IP:5000/centos:7

拉取镜像
#拉取镜像 
docker pull 私有仓库服务器ip:5000/centos:7

将镜像上传至阿里云的镜像仓库

阿里云的个人镜像仓库在控制台里选择容器镜像服务
点击进入的界面可以创建镜像仓库实现相应的推送拉取操作,阿里云会提示你输入怎样的命令实现相应的操作

image.png

创建容器

创建mysql容器

  1. 挂载外部持久化配置和数据目录
mkdir /usr/local/mysql
mkdir /usr/local/mysql/conf.d
mkdir /usr/local/mysql/data/

创建my.cnf配置文件(文件在代码库第二章获取)

vim /usr/local/mysql/my.cnf

my.cnf添加如下内容:

[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

运行容器 指定了mysql5.7.30版本的镜像来创建
-e 用来传递环境变量

docker run \
 --name mysql57 \
 -p 3366:3306 \
 -v /usr/local/mysql/data:/var/lib/mysql \
 -v /usr/local/mysql/log:/var/log/mysql \
 -v /usr/local/mysql/my.cnf:/etc/mysql/my.cnf:rw \
 -e MYSQL_ROOT_PASSWORD=1234 \
 -d mysql:5.7.30 --default-authentication-plugin=mysql_native_password

创建redis容器

redis.conf配置文件下载地址

如果要添加密码则需要 —requirepass 这里设置的密码是1234

docker run -p 6379:6379 -v /usr/local/redis/data:/data -v /usr/local/redis/redis.conf:/etc/redis.conf --name redis -d redis --requirepass 1234 --appendonly yes

创建maven私服的容器

先下拉 nexus3的镜像 不是官方的

docker pull sonatype/nexus3
docker run -d -p 8081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3

初始密码需要到容器内部去查看

docker exec -it nexus bash
cd nexus-data
cat admin.password

1580379728907.png
bash前面乱七八糟的就是初始密码,登录成功之后会提示你修改

创建rabbitmq容器

先拉去rabbitmq镜像

management是有控制台页面的

docker pull rabbitmq 
docker pull rabbitmq:management

创建容器

docker run --name rabbitmq -d -p 15672:15672 -p 5672:5672 rabbitmq:management

启动容器后,可以浏览器中访问来查看控制台信息。
RabbitMQ默认的用户名:guest,密码:guest

创建nginx容器

把nginx容器里的/etc/nginx ,/var/log/nginx ,/usr/share/nginx/html目录通过docker cp命令复制到指定的本机目录中 然后重新创建nginx容器这样就方便对nginx配置进行操作

docker run --name nginx -p 80:80 -v /root/nginx/html:/usr/share/nginx/html -v /root/nginx/nginx:/etc/nginx -v /root/nginx/log:/var/log/nginx -d nginx

以本人使用经验来看,使用nginx不推荐使用docker