# 添加Yum安装源镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Yum安装最新docker-ce版本
# -ce是社区版(免费)
# -ee是企业版(收费)
yum -y install docker-ce
安装包下载
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
Yum本地安装docker18.03
yum install -y libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm
yum install -y docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
yum install -y docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://q31hsvmg.mirror.aliyuncs.com"],
"insecure-registries": ["docker-registry:5000"]
}
systemctl daemon-reload
systemctl restart docker
# 服务启停
service docker start/stop/restart
# 搜索镜像
docker search imageName
# 拉取搜索出的镜像
docker pull imageName
# 拉取指定版本的镜像:
# 先在站点上搜索镜像 https://hub.docker.com/search?q=&type=image
# 然后点击Tag找到对应版本的Tag
docker pull imageName:tag
# 删除已存在的镜像
docker rmi imageName
# 修改镜像名
docker tag 旧镜像名:tag 新镜像名:tag
# 查看当前镜像列表
docker images
# 运行MySQL,其中:
# --name:新建的容器名
# -p:端口映射,Docker映射端口号:MySQL原始端口号
# -e:运行参数设定
# -d:后台运行
# mysql:5.7:镜像名:标签名
docker run --name mysql_57 -p 30001:3306 -e MYSQL_ROOT_PASSWORD=my_pass -d mysql:5.7
# 运行PostgreSQL
docker run -it --name pg_10 -p 5432:5432 -e POSTGRES_PASSWORD=postgres -e ALLOW_IP_RANGE=0.0.0.0/0 -d postgres:10
# 运行MS SQLServer, 容易出现的错误是密码不满足要求,SQLServer的要求是至少8位且需要由大写字母、小写字母、数字、符号中的至少3种组成
docker run --name SQLServer -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Abc12345" -p 1433:1433 -d mcr.microsoft.com/mssql/server
# 运行Tomcat,其中:
# --name tomcat_MyTest:tomcat_MyTest是新建容器的名字
# -p 9090:8080:9090是docker映射的端口号,8080是tomcat的端口号
# -d:后台运行
# tomcat:8.5-jdk8-corretto:镜像名:Tag名
docker run -p 8080:8080 --name tomcat_MyTest tomcat:8.5-jdk8-corretto -d
# 运行draw.io
# 下载:docker pull fjudith/draw.io
# 参数:--restart=always 总是自启动
docker run -dit --name=draw.io -p 8080:8080 fjudith/draw.io
有些许情况下,比如遇到了容器启动不成功的情况,可以通过下面的命令来查看容器运行的日志
docker logs conatiner_name
# 显示所有容器
docker ps -a
# 显示当前运行中的容器
docker ps
# 启动容器
docker start containerId
# 停止容器
docker stop containerId
# 重启容器
docker restart containerId
# 删除容器
docker rm containerId
# 进入容器
docker exec -it 容器ID /bin/bash
# 文件拷贝
# 从主机到容器
docker cp 文件 容器ID:容器中的路径
# 从容器到主机
docker cp 容器ID:容器中的路径 主机上文件的路径
用命令:docker export/import 直接导出/导入容器,不能保留运行时相关信息,如把war包存放到tomcat,导出时war包会被遗弃。所以正确的迁移方式应该是将容器导出成镜像。步骤如下:
# 导出:
# 提交当前容器状态,并根据当前容器 生成一个新的镜像:
docker commit 容器id 新创建的镜像名称
# 将新创建的镜像导出成tar:
docker save 新创建的镜像名称 > 镜像名称.tar
# 或
docker save --output xxxx.tar imageName
# 导入:
docker load < 镜像名称.tar
# 查看容器运行日志
docker logs -f -t --tail 显示最后多少行 容器id
###### 当前路径
[root@myhost MyCentOS7Gui]# pwd
/root/MyCentOS7Gui
###### 文件准备
[root@myhost MyCentOS7Gui]# ll
total 8
-rw-r--r-- 1 root root 240 Apr 23 15:31 Dockerfile
-rw-r--r-- 1 root root 23 Apr 23 15:19 my_file.log
###### Dockerfile文件内容
[root@myhost MyCentOS7Gui]# cat Dockerfile
# 镜像来源。本地没有时,会自动下载
FROM centos:7
# 作者
MAINTAINER "chenth"
# 在镜像中创建目录
RUN mkdir -p /home/chenth
RUN mkdir /home/chenth/dir1
RUN mkdir /home/chenth/dir2
# 文件拷贝
ADD my_file.log /home/chenth
# 卷,将镜像中的目录挂载到宿主机docker安装目录下
VOLUME ["/home/chenth/mydir1","/home/chenth/mydir2"]
# 添加环境变量
# ENV JAVA_HOME /usr/local/jdk1.8.0_141
# ENV PATH $PATH:$JAVA_HOME/bin
# 镜像启动为容器后自动执行该指令
# CMD ["touch /home/chenth/autofile"]
###### 创建镜像
[root@myhost MyCentOS7Gui]# docker build -t my_centos7_gui:v1.0 .
Sending build context to Docker daemon 3.072kB
Step 1/7 : FROM centos:7
---> 8652b9f0cb4c
Step 2/7 : MAINTAINER "chenth"
---> Running in 1c034bb48bbe
Removing intermediate container 1c034bb48bbe
---> e32fcf644254
Step 3/7 : RUN mkdir -p /home/chenth
---> Running in 257b02c355dd
Removing intermediate container 257b02c355dd
---> 25074e37aa67
Step 4/7 : RUN mkdir /home/chenth/dir1
---> Running in d791690a9527
Removing intermediate container d791690a9527
---> 6316c85de61c
Step 5/7 : RUN mkdir /home/chenth/dir2
---> Running in 5b83585220b9
Removing intermediate container 5b83585220b9
---> 0e6c97b774b0
Step 6/7 : ADD my_file.log /home/chenth
---> 991d1e9dadc5
Step 7/7 : VOLUME ["/home/chenth/mydir1","/home/chenth/mydir2"]
---> Running in e3c88116a00a
Removing intermediate container e3c88116a00a
---> d0d1abb033f4
Successfully built d0d1abb033f4
Successfully tagged my_centos7_gui:v1.0
[root@myhost MyCentOS7Gui]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_centos7_gui v1.0 e6487361bc35 7 minutes ago 204MB
centos 7 8652b9f0cb4c 5 months ago 204MB
# docker run的时候指定卷的宿主机映射目录
[root@myhost MyCentOS7Gui]# docker run --name myCentOS7Gui --privileged -p 5901:5901 -v /root/tmp:/home/chenth/mydir1 --ulimit memlock=-1 -td my_centos7_gui:v1.1 /usr/sbin/init
1bb71101568aaf6711fe41639469fe30dcab65694580ec020323235ea6a8595e
[root@naeeiot-dev MyCentOS7Gui]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1bb71101568a my_centos7_gui:v1.1 "/usr/sbin/init" 4 seconds ago Up 4 seconds 0.0.0.0:5901->5901/tcp, :::5901->5901/tcp myCentOS7Gui
# 在容器中查看宿主机操作系统
root@13f4486c2880:/bin# uname -a
Linux 13f4486c2880 5.10.25-linuxkit #1 SMP Tue Mar 23 09:27:39 UTC 2021 x86_64 GNU/Linux
# 在容器中查看容器操作系统
root@13f4486c2880:/bin# cat /etc/issue
Debian GNU/Linux 10 \n \l
# 因为容器操作系统是Debian,所以安装用apt-get
root@13f4486c2880:/bin# apt-get update
root@13f4486c2880:/bin# apt-get install vim